<?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=Damian-s</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=Damian-s"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Damian-s"/>
	<updated>2026-04-24T01:07:43Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41019</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41019"/>
		<updated>2026-04-23T17:32:30Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] ## Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen. Sollten beide Version gleichzeitig genutzt werden wollen, dann müssen die programmierten Perlfunktionen einer Version umbenannt werden, sonst überschreiben sie sich gegenseitig, weil sie im gleichen Package liegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] ## Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41018</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41018"/>
		<updated>2026-04-23T17:31:58Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] ## Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen. Sollten beide Version gleichzeitig genutzt werden wollen, dann müssen die programmierten Perlfunktionen einer Version umbenannt werden, sonst überschreiben sie sich gegenseitig, weil sie im gleichen Package liegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41017</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41017"/>
		<updated>2026-04-23T17:02:27Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen. Sollten beide Version gleichzeitig genutzt werden wollen, dann müssen die programmierten Perlfunktionen einer Version umbenannt werden, sonst überschreiben sie sich gegenseitig, weil sie im gleichen Package liegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41016</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41016"/>
		<updated>2026-04-23T16:47:49Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41015</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41015"/>
		<updated>2026-04-23T16:46:04Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:UiTable_energy_card.gif&amp;diff=41014</id>
		<title>Datei:UiTable energy card.gif</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:UiTable_energy_card.gif&amp;diff=41014"/>
		<updated>2026-04-23T16:37:30Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41013</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41013"/>
		<updated>2026-04-23T16:36:19Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Hier wird eine Version der Energie-Karte mit Hilfe der DOIF-SVG-card-Funktion realisiert. In dieser Darstellung wird zusätzlich der Verlauf der jeweiligen Leistungen und der Speicherkapazität visualisiert. Die Konfiguration bzw. Anpassung an eigene Bedürfnisse sind wie bei der kompakten Energie-Karte oben vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card DOIF subs {\&lt;br /&gt;
## Leistungangaben in kW, \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
## Tagesenergie in kWh, Werte können überschritten werden\&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,101,-1,100,0);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,0,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
##  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,-1,101,0,100);; \&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,97,0,0);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,-1,101,1,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
 ## ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,101,-1,0,100);;\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,3,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 90 35&amp;quot; width=&amp;quot;90&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:90px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;90%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
##$out .= &#039;&amp;lt;defs&amp;gt; &amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;0%&amp;quot; x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;0%&amp;quot;&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;gray&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;&amp;lt;/defs&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;gray&amp;quot; stroke-opacity=&amp;quot;0.2&amp;quot; stroke-width=&amp;quot;3&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;2&amp;quot; stroke-dasharray=&amp;quot;3 9&amp;quot;&amp;gt;&amp;lt;animate id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; attributeName=&amp;quot;stroke-dashoffset&amp;quot; from=&amp;quot;&#039;.$from.&#039;&amp;quot; to=&amp;quot;&#039;.$to.&#039;&amp;quot; dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot;/&amp;gt;&amp;lt;/path&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(110,149,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30 L 90 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(274,149,flow(&amp;quot;M 85 0 A 30 30 0 0 1 55 30 L 0 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power,$max)=@_;;  \&lt;br /&gt;
return move(110,185,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5 L 90 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(274,185,flow(&amp;quot;M 85 35 A 30 30 0 0 0 55 5 L 0 5&amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
move(2,2,card($power,&amp;quot;Netz&amp;quot;,&amp;quot;scene_power_grid\@silver&amp;quot;,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;3&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$feed,0,$_grid_energy_feed_max,60,90,&amp;quot;Einsp.&amp;quot;,undef],[$consum,0,$_grid_energy_consum_max,40,10,&amp;quot;Bezug&amp;quot;,undef]],0,0,undef,undef,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(200,151,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,120,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
sub solar { \&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;;  move(237,2,card($power,&amp;quot;PV&amp;quot;,&amp;quot;solar_icon\@silver&amp;quot;,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer&amp;quot;,undef, [$self_energy,$energy],0,$_solar_energy_max,60,90,[&amp;quot;Eigen.&amp;quot;,&amp;quot;Erzeug.&amp;quot;],undef,&amp;quot;1,,fill:silver, kWh&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;; move(2,222,card($power,&amp;quot;Haus&amp;quot;,&amp;quot;fa_home\@silver&amp;quot;,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,undef,&amp;quot;3,,,&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;,undef, [[$consum]],0,$_home_energy_max,40,10,[&amp;quot;&amp;quot;],undef,&amp;quot;1,,, kWh&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$Cap)=@_;;\&lt;br /&gt;
	move(237,222,card($power,&amp;quot;Speicher&amp;quot;,&amp;quot;battery_100\@silver&amp;quot;,-$_battery_power_max,$_battery_power_max,undef,undef,&amp;quot;kW&amp;quot;,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;3,,,&amp;quot;,&amp;quot;130,fixedscaling,steps,footer,noycolor,ring,180&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef,[$Cap],0,100,0,90,&amp;quot;Kapaz.&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;))\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skalliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 473px;; height: 384px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power:144col1d],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power:144col1d],[$SELF:solar_energy],[$SELF:solar_self_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power:144col1d],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d:$_/1000],[$SELF:battery_capa:144col1d]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power:144col1d],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Automatisierung&amp;diff=41012</id>
		<title>DOIF/Automatisierung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Automatisierung&amp;diff=41012"/>
		<updated>2026-04-23T07:29:03Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An dieser Stelle werden Lösungen für praxisrelevante Automatisierungsaufgaben mit Hilfe des DOIF-Moduls vorgestellt. Insbesondere werden mit Hilfe von Templates generische DOIF-Lösungen an konkreten Beispielen dargestellt, die für mehrere Szenarien nutzbar sind.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Licht ==&lt;br /&gt;
=== Einfache Zeitsteuerung für ein Szenario ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung siehe Commandref: Zeitsteuerung]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung: Lichter sollen in einem bestimmten Zeitraum leuchten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_licht DOIF ([21:00-23:00])\&lt;br /&gt;
  (set Lampeflur on, set Lampekueche on)\&lt;br /&gt;
DOELSE\ &lt;br /&gt;
  (set Lampeflur off, set Lampekueche off)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Helligkeitsabhängige Zeitsteuerung für ein Szenario ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Kombination_von_Ereignis_und_Zeitsteuerung_mit_logischen_Abfragen siehe Commandref: logische Abfragen]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung: Lichter sollen innerhalb eines Zeitraums leuchten, aber nur wenn es dunkel ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition für Dunkelheit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein DOIF-Modul definiert, welches mit Hilfe eines Helligkeitssensors den Zustand &amp;quot;on&amp;quot; bei Dunkelheit annimmt, sonst &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Dunkelheit DOIF ([Helligkeitssensor:brightness] &amp;lt; 100) DOELSE&lt;br /&gt;
attr Dunkelheit cmdState on|off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_licht DOIF ([16:00-23:00] and [Dunkelheit] eq &amp;quot;on&amp;quot;)\&lt;br /&gt;
  (set Lampeflur on, set Lampekueche on)\&lt;br /&gt;
DOELSE\ &lt;br /&gt;
  (set Lampeflur off, set Lampekueche off)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus siehe Commandref: DOIF-Perlmodus]&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 siehe Forum-Beitrag: Generalisierung mit Templates]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung:&lt;br /&gt;
* Es soll nur eine Steuerung für alle Lichtszenarien programmiert werden.&lt;br /&gt;
* Verschiedene Lichtszenarien sollen über Angabe bestimmter Parameter generiert werden. &lt;br /&gt;
* Eine Lichtszene soll durch folgende Angaben definierbar sein: Szenenname, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl, Zeitraum des Jahres. &lt;br /&gt;
* Eine neue Szene soll durch Hinzufügen eines Template-Aufrufs erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Licht_tpl DOIF DEF TPL_light ( ## Definition des Templates namens TPL_light zur Steuerung einer Lichtszene\&lt;br /&gt;
light_$1 {                               ## DOIF Block\&lt;br /&gt;
                                         ## Parameter: Szene Daemmerungssensor Zeitspanne on off von bis\&lt;br /&gt;
                                         ## Nr.:       $1    $2                $3         $4 $5  $6  $7\&lt;br /&gt;
  if ($md ge &amp;quot;$6&amp;quot; or $md le &amp;quot;$7&amp;quot;) {      ## wenn innerhalb der Jahreszeit (von bis)\&lt;br /&gt;
    if (($3) and [$2] eq &amp;quot;on&amp;quot;) {         ## wenn in der Zeitspanne und Dämmerung on\&lt;br /&gt;
      fhem_set($4);;                     ## schalte on-Befehle\&lt;br /&gt;
      set_State(&amp;quot;Szene: $1&amp;quot;);;           ## Setze Status des DOIF-Moduls\&lt;br /&gt;
    } else {\&lt;br /&gt;
      fhem_set ($5);;                    ## sonst, schalte off-Befehle\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
} ## Ende des light-Blocks\&lt;br /&gt;
) ## Ende der Templatedefinition\&lt;br /&gt;
\&lt;br /&gt;
## Generierung der Steuerung pro Beschattungsszene mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_light (Erdgeschoss,Daemmerung2,([06:25-08:00|8] or [15:00-23:00]),&amp;quot;Lampekueche,LampeFlur on&amp;quot;,&amp;quot;Lampekueche,LampeFlur off&amp;quot;,01-01, 12-31)\&lt;br /&gt;
TPL_light (Kind2,Daemmerung2,[06:25-08:00|8] or [15:00-23:10],&amp;quot;schrank2 on&amp;quot;,&amp;quot;schrank2 off&amp;quot;,12-01,03-31)\&lt;br /&gt;
TPL_light (Terrasse,Dunkelheit,[17:00-23:05],&amp;quot;Terrasse on&amp;quot;,&amp;quot;Terrasse off&amp;quot;,01-01,12-31)\&lt;br /&gt;
TPL_light (Garten,Dunkelheit,[16:00-23:30],&amp;quot;Garten pct 50&amp;quot;,&amp;quot;Garten off&amp;quot;,01-01,12-31)\&lt;br /&gt;
## ... hier können weitere Szenarien durch hinzufügen weiterer Zeilen generiert werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien mit tabellarischer Übersicht===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Helligkeitsabh.C3.A4ngige_Zeitsteuerung_f.C3.BCr_mehrere_Szenarien  siehe Zeitsteuerung für mehrere Szenarien ohne Visualisierung]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg siehe Tabellendefinitionen mit Attribut uiTable]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung:&lt;br /&gt;
* Es soll nur eine Steuerung für mehrere Lichtszenarien programmiert werden.&lt;br /&gt;
* Ein Lichtszenario soll durch folgende Angaben definierbar sein: Szenario-Name, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl&lt;br /&gt;
* Ein neues Szenario soll durch hinzufügen einer Parameterzeile erstellt werden können. &lt;br /&gt;
* Erstellte Lichtszenarien sollen tabellarisch dargestellt werden und über Weboberfläche einzeln schaltbar sein: auto/on/off&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Licht_all DOIF subs  {\&lt;br /&gt;
## Ein Szenario wird durch Hinzufügen einer Definitionszeile erstellt\&lt;br /&gt;
##              Szene         Dämmerungssensor    Zeitspanne                            Einschaltbefehl             Ausschaltbefehl\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Daemmerung2&amp;quot;,      &amp;quot;[06:25-08:00|8] or [15:00-23:30]&amp;quot;,   &amp;quot;Lampekueche,Lampeflur on&amp;quot;, &amp;quot;Lampekueche,Lampeflur off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Kinderz_2&amp;quot;,  &amp;quot;Daemmerung2&amp;quot;,      &amp;quot;[06:25-08:00|8] or [15:00-23:10]&amp;quot;,   &amp;quot;schrank2 on&amp;quot;,              &amp;quot;schrank2 off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Terrasse&amp;quot;,   &amp;quot;Dunkelheit&amp;quot;,       &amp;quot;[16:00-23:30]&amp;quot;,                      &amp;quot;Terrasse on&amp;quot;,              &amp;quot;Terrasse off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Garten&amp;quot;,     &amp;quot;Dunkelheit&amp;quot;,       &amp;quot;[16:00-23:30]&amp;quot;,                      &amp;quot;Garten pct 50&amp;quot;,            &amp;quot;Garten off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Strauch1&amp;quot;,   &amp;quot;Dunkelheit&amp;quot;,       &amp;quot;[17:00-23:05]&amp;quot;,                      &amp;quot;Strauch1 on&amp;quot;,              &amp;quot;Strauch1 off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Strauch2&amp;quot;,   &amp;quot;Dunkelheit&amp;quot;,       &amp;quot;[17:00-23:05]&amp;quot;,                      &amp;quot;Strauch2 on&amp;quot;,              &amp;quot;Strauch2 off&amp;quot;]);;\&lt;br /&gt;
push (@{$_sc},[&amp;quot;Eingang&amp;quot;,    &amp;quot;Dunkelheit&amp;quot;,       &amp;quot;[17:00-23:35]&amp;quot;,                      &amp;quot;Aussenbeleuchtung on&amp;quot;,     &amp;quot;Aussenbeleuchtung off&amp;quot;]);;\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt\&lt;br /&gt;
if ($::init_done) {\&lt;br /&gt;
  fhem(&amp;quot;deletereading $SELF .*&amp;quot;);;\&lt;br /&gt;
  set_State(&amp;quot;initialized&amp;quot;);;\&lt;br /&gt;
  for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      set_Reading ($_sc[$i][0].&amp;quot;.Status&amp;quot;,&amp;quot;off&amp;quot;);;\&lt;br /&gt;
	  set_Reading ($_sc[$i][0].&amp;quot;.aktiv&amp;quot;,&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
} ## end of subs\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_light ( ## Definition des Templates namens TPL_light\&lt;br /&gt;
light_$1 {      ## Parameter: Szene Daemmerung Zeitspanne on off \&lt;br /&gt;
                ##            $1    $2         $3         $4 $5\&lt;br /&gt;
  if ([$SELF:$1.aktiv] eq &amp;quot;auto&amp;quot;) {\&lt;br /&gt;
    if (($3) and [$2] eq &amp;quot;on&amp;quot;) {\&lt;br /&gt;
      fhem_set($4);;\&lt;br /&gt;
      set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;on&amp;quot;,1);;\&lt;br /&gt;
    } else {\&lt;br /&gt;
      fhem_set ($5);;\&lt;br /&gt;
      set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;off&amp;quot;,1);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
} ## Ende des light-Blocks\&lt;br /&gt;
\&lt;br /&gt;
active_$1 {\&lt;br /&gt;
  if ([$SELF:$1.aktiv] eq &amp;quot;on&amp;quot;) {\&lt;br /&gt;
    fhem_set ($4);;\&lt;br /&gt;
    set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;on&amp;quot;,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  if ([$SELF:$1.aktiv] eq &amp;quot;off&amp;quot;) {\&lt;br /&gt;
    fhem_set ($5);;\&lt;br /&gt;
    set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;off&amp;quot;,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
} ## Ende des active-Blocks \&lt;br /&gt;
) ## Ende der Templatedefinition\&lt;br /&gt;
\&lt;br /&gt;
## Generierung der Steuerung pro Licht-Szene mit Hilfe des obigen Templates\&lt;br /&gt;
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,&amp;quot;$_$4&amp;quot;,&amp;quot;$_$5&amp;quot;))&lt;br /&gt;
attr di_Licht_all room Licht&lt;br /&gt;
attr di_Licht_all uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..5}=&amp;quot;style=&#039;padding-left: 2px;; padding-right: 2px;;&#039; align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Überschrift der Parameter\&lt;br /&gt;
&amp;quot;Szene&amp;quot;|&amp;quot;Dämmerung&amp;quot;|&amp;quot;Zeitspanne&amp;quot;|&amp;quot;Status&amp;quot;|&amp;quot;ausgeführt&amp;quot;|&amp;quot;aktiv&amp;quot;\&lt;br /&gt;
\&lt;br /&gt;
## Pro Datensatz einer Licht-Szene wird eine Zeile mit Werten und Widgets generiert\&lt;br /&gt;
FOR (@{$VAR{sc}},&amp;quot;$_$1&amp;quot;|icon([$_$2])|&amp;quot;$_$3&amp;quot;|icon([$SELF:$_$1.Status])|::ReadingsTimestamp(&amp;quot;$SELF&amp;quot;,&amp;quot;$_$1.Status&amp;quot;,0)|WID([$SELF:$_$1.aktiv],&amp;quot;select,auto,on,off&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Licht_Szenarien.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Beschattung ==&lt;br /&gt;
=== Beschattungssteuerung abhängig von der Zimmertemperatur und Sonneneinstrahlung für mehrere Szenarien ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus siehe Commandref: DOIF-Perlmodus]&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 siehe Forum-Beitrag: Generalisierung mit Templates]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung: &lt;br /&gt;
* Es soll nur eine zentrale Steuerungslogik für alle Beschattungsszenarien erstellt werden.&lt;br /&gt;
* Ein Beschattungsszenario soll durch folgende Angaben definierbar sein:  Name der Szene, Temperatursensor des Zimmers, Sonnensensor, von Uhrzeit, bis Uhrzeit, Rollläden, Befehl zum Herunterfahren, Befehl zum Hochfahren. &lt;br /&gt;
* Ein neues Beschattungsszenario soll nur durch das Hinzufügen eines Template-Aufrufs erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein DOIF-Modul definiert, welches verzögert mit Hilfe einer PV-Anlage den Zustand &amp;quot;on&amp;quot; bei Sonneneinstrahlung annimmt, sonst &amp;quot;off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition für Sonneneinstrahlung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sonne_s DOIF ([zaehler:PV-Leistung] &amp;gt; 2.5)&lt;br /&gt;
attr Sonne_s cmdState on|off&lt;br /&gt;
attr Sonne_s wait 1800:7200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition des Steuermoduls&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_beschattung1 DOIF DEF TPL_shutter (    ## Definition des Templates namens TPL_shutter\&lt;br /&gt;
## Parameternummer $1             $2                           $3           $4          $5          $6        $7                        $8 \&lt;br /&gt;
## Bedeutung       Name der Szene Temperatursensor des Zimmers Sonnensensor von Uhrzeit bis Uhrzeit Rollladen Befehl zum Herunterfahren Befehl zum Hochfahren\&lt;br /&gt;
shutter_$1 {                                     ## DOIF Block\&lt;br /&gt;
  if ([$4-$5]) {                                 ## innerhalb des Zeitfensters     \&lt;br /&gt;
    if ([$2:measured-temp] &amp;gt; 24 and [$3] eq &amp;quot;on&amp;quot; and !$VAR{$1}) { ## Wenn die Zimmertemperatur über 24 und Sonne scheint und die Rollläden noch nicht heruntergefahren wurden\&lt;br /&gt;
      fhem_set(&amp;quot;$6 $7&amp;quot;);;                        ## Fenster herunterfahren\&lt;br /&gt;
      set_State(&amp;quot;Szene: $1 Beschattung&amp;quot;);;       ## Status mit letztem Befehl belegen \&lt;br /&gt;
      $VAR{$1}=1;;                               ## Merker setzen, dass Fenster bereits heruntergefahren wurde\&lt;br /&gt;
    } elsif ([$2:measured-temp] &amp;lt; 23.5 and [$3] eq &amp;quot;off&amp;quot; and $VAR{$1}) { ## Wenn die Zimmertemperatur unter 23.5 und Sonne scheint nicht und die Rollläden bereits heruntergefahren wurden\&lt;br /&gt;
      fhem_set(&amp;quot;$6 $8&amp;quot;);;                        ## Fenster hochfahren\&lt;br /&gt;
      set_State(&amp;quot;Szene: $1 keine Beschattung&amp;quot;);; ## Status mit letztem Befehl belegen \&lt;br /&gt;
      $VAR{$1}=0;;                               ## Merker zurücksetzen\&lt;br /&gt;
    }\&lt;br /&gt;
  }  \&lt;br /&gt;
}\&lt;br /&gt;
)  ## Ende der Templatedefinition\&lt;br /&gt;
\&lt;br /&gt;
reset {[00:01];;delete $VAR;;}    ## DOIF-Block namens reset um nachts alle Merker zu löschen\&lt;br /&gt;
\&lt;br /&gt;
## Definition einzelner DOIF-Blöcke pro Fenstergruppe mit Hilfe des Templates\&lt;br /&gt;
##           $1           $2       $3      $4    $5    $6   $7 $8\&lt;br /&gt;
TPL_shutter (Dachgeschoss,TH_DG_HM,Sonne_s,12:00,21:00,R_DG,30,on)\&lt;br /&gt;
TPL_shutter (Kueche,TH_Kueche_HM,Sonne_s,09:00,14:00,R_Kueche,50,on)\&lt;br /&gt;
TPL_shutter (Kinderzimmer1_ost,TH_Kz_o_HM,Sonne_s,09:00,14:00,R_Kinderzimmer1_O,30,on)\&lt;br /&gt;
TPL_shutter (Kinderzimmer1_sued,TH_Kz_o_HM,Sonne_s,12:00,21:00,R_Kinderzimmer1_S,25,on)\&lt;br /&gt;
TPL_shutter (Kinderzimmer2_sued,TH_Kz_w_HM,Sonne_s,12:00,21:00,R_Kinderzimmer2_S,25,on)\&lt;br /&gt;
TPL_shutter (Kinderzimmer2_west,TH_Kz_w_HM,Sonne_w,15:30,22:00,R_Kinderzimmer2_W.*,25,on)\&lt;br /&gt;
TPL_shutter (Wohnzimmmer_sued,TH_WZ_HM,Sonne_s,12:30,21:00,R_W_S,25,on)\&lt;br /&gt;
TPL_shutter (Wohnzimmer_west,TH_WZ_HM,Sonne_w,15:30,22:00,R_W_W[23],25,on)\&lt;br /&gt;
## hier können weitere Szenarien für weitere Fenster hinzugefügt werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beschattungssteuerung abhängig von der Zimmertemperatur und Sonneneinstrahlung für mehrere Szenarien mit Visualisierung===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus siehe Commandref: DOIF-Perlmodus]&lt;br /&gt;
*[https://wiki.fhem.de/wiki/DOIF/Automatisierung#Beschattungssteuerung_abh.C3.A4ngig_von_der_Zimmertemperatur_und_Sonneneinstrahlung_f.C3.BCr_mehrere_Szenarien siehe: Beschattungssteuerung ohne Visualisierung]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Templates siehe: Generalisierung mit Templates]&lt;br /&gt;
}}&lt;br /&gt;
Anforderung: &lt;br /&gt;
* Es soll nur eine zentrale Steuerungslogik für alle Beschattungsszenarien erstellt werden.&lt;br /&gt;
* Ein Beschattungsszenario soll durch folgende Angaben definierbar sein:  Name der Szene, Temperatursensor des Zimmers, Sonnensensor(on/off), von Uhrzeit, bis Uhrzeit, Rollläden, Befehl zum Herunterfahren, Befehl zum Hochfahren, Status, Modus(aktiv/deaktiv)&lt;br /&gt;
* Ein neues Beschattungsszenario soll nur durch das Hinzufügen einer Parameter-Zeile erstellt werden können.&lt;br /&gt;
* Erstellte Beschattungsszenarien sollen automatisch tabellarisch dargestellt werden und einzeln abschaltbar sein.&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition des Steuermoduls&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_beschattung2 DOIF subs  {\&lt;br /&gt;
@{$_params}= qw(  Szene      Temperatursensor  Sonnensensor Rollladen        runter hoch   von   bis Status aktiv);;\&lt;br /&gt;
\&lt;br /&gt;
## Definition einzelner Datensätze pro Szene, Szenen können zeilenweise gelöscht bzw. hinzugefügt werden\&lt;br /&gt;
push (@{$_sc},[qw(Bad                 TH_Bad_HM     Sonne_s R_Bad                30   on 13:00 22:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Dachgeschoss        TH_DG_HM      Sonne_s R_Dachboden          30   on 13:00 22:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kueche              TH_Kueche_HM  Sonne_s R_Kueche             50   on 09:00 14:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinderzimmer_1_ost  TH_Kz_o_HM    Sonne_s R_Kinderzimmer1_O    30   on 09:00 14:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinderzimmer_1_sued TH_Kz_o_HM    Sonne_s R_Kinderzimmer1_S    25   on 13:00 22:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinderzimmer_2_sued TH_Kz_w_HM    Sonne_s R_Kinderzimmer2_S    25   on 13:00 22:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinderzimmer_2_west TH_Kz_w_HM    Sonne_w R_Kinderzimmer2_W.*  25   on 15:30 22:00 off on)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Wohnzimmer_west     TH_WZ_HM      Sonne_w R_W_W[23]            25   on 15:30 22:00 off on)]);;\&lt;br /&gt;
\&lt;br /&gt;
if ($::init_done) {                        ## Bei Änderung der Definition werden alle erfoderlichen Readings erstellt und vorbelegt\&lt;br /&gt;
    fhem(&amp;quot;deletereading $SELF .*&amp;quot;);;        ## alle Readings des Moduls löschen\&lt;br /&gt;
    set_State(&amp;quot;initialized&amp;quot;);;              ## Status setzen\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      for (my $j=6;;$j &amp;lt; @{$_sc[$i]};;$j++) { ## für Parameter 7 bis 10 Readings anlegen\&lt;br /&gt;
        set_Reading ($_sc[$i][0].&amp;quot;.&amp;quot;.$_params[$j],$_sc[$i][$j]);;\&lt;br /&gt;
      }\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
\&lt;br /&gt;
sub reset_state {\&lt;br /&gt;
  for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
    set_Reading($_sc[$i][0].&amp;quot;.Status&amp;quot;,&amp;quot;off&amp;quot;,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_shutter ( ## Definition des Templates namens TPL_shutter, Parameter: $1:Szenenname, $2:Temperatursensor, $3:Sonnensonsor, $4:Rollläden, $5:runter, $6:hoch, $7:von, $8:bis, $9:Status, $10:aktiv \&lt;br /&gt;
shutter_$1 {  \&lt;br /&gt;
if ($10 eq &amp;quot;on&amp;quot; and [$7-$8]) {         ## wenn Szene aktiv und innerhalb  des Zeitfensters\&lt;br /&gt;
  if ([$2:measured-temp] &amp;gt; 24 and [$3] eq &amp;quot;on&amp;quot; and get_Reading(&amp;quot;$9&amp;quot;) eq &amp;quot;off&amp;quot;) { ## Wenn die Zimmertemperatur über 24 und Sonne scheint und Rollläden noch nicht heruntergefahren wurden\&lt;br /&gt;
    fhem_set(&amp;quot;$4 $5&amp;quot;);;                 ## Rollläden herunterfahren\&lt;br /&gt;
    set_State(&amp;quot;Szene: $1 $5&amp;quot;);;         ## Status setzen\&lt;br /&gt;
    set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;on&amp;quot;,1);;   ## Status für Szene im Reading ablegen  \&lt;br /&gt;
  } elsif ([$2:measured-temp] &amp;lt; 23.5 and [$3] eq &amp;quot;off&amp;quot; and get_Reading(&amp;quot;$9&amp;quot;) eq &amp;quot;on&amp;quot;) { ## Wenn die Zimmertemperatur unter 23.5 und Sonne scheint nicht und Rollläden bereits heruntergefahren wurden\&lt;br /&gt;
    fhem_set(&amp;quot;$4 $6&amp;quot;);;                 ## Rollläden hochfahren\&lt;br /&gt;
    set_State(&amp;quot;Szene: $1 $6&amp;quot;);;         ## Status mit letzer Szene belegen\&lt;br /&gt;
    set_Reading(&amp;quot;$1.Status&amp;quot;,&amp;quot;off&amp;quot;,1);;  ## Status für Szene im Reading ablegen\&lt;br /&gt;
   }\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
) ## Ende der Templatedefinition\&lt;br /&gt;
\&lt;br /&gt;
reset {[00:01];; reset_state();;}     ## nachts alle Status zurücksetzen\&lt;br /&gt;
\&lt;br /&gt;
## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates\&lt;br /&gt;
FOR (@{$_sc},TPL_shutter($_$1,$_$2,$_$3,$_$4,$_$5,$_$6,[$SELF:$_$1.von],[$SELF:$_$1.bis],$_$1.Status,[$SELF:$_$1.aktiv]))\&lt;br /&gt;
&lt;br /&gt;
attr di_beschattung2 uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..10}=&amp;quot;style=&#039;padding-left: 10px;; padding-right: 10px;; padding-top: 3px;; padding-bottom: 3px;;&#039; align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Überschrift der Parameter\&lt;br /&gt;
&amp;quot;Szene&amp;quot;|&amp;quot;Temperatur&amp;quot;|&amp;quot;Einstrahlung&amp;quot;|&amp;quot;von&amp;quot;|&amp;quot;bis&amp;quot;|&amp;quot;Status&amp;quot;|&amp;quot;aktiv&amp;quot;\&lt;br /&gt;
\&lt;br /&gt;
## Pro Datensatz einer Beschattungs-Szene wird eine Zeile mit Werten und Widgets generiert\&lt;br /&gt;
FOR (@{$VAR{sc}},&amp;quot;$_$1&amp;quot;|temp_ring([$_$2:measured-temp])|icon([$_$3:state],&amp;quot;fa_cloud&amp;quot;,&amp;quot;weather_sun\@yellow&amp;quot;)|[$SELF:$_$1.von]|[$SELF:$_$1.bis]|icon([$SELF:$_$1.Status],&amp;quot;fts_shutter_10&amp;quot;,&amp;quot;fts_shutter_80&amp;quot;).substr(::ReadingsTimestamp(&amp;quot;$SELF&amp;quot;,&amp;quot;$_$1.Status&amp;quot;,0),11,5)|WID([$SELF:$_$1.aktiv],&amp;quot;select,on,off&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:beschattung2.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Heizungsregelung mit Hilfe von Raumthermostaten ==&lt;br /&gt;
Die folgenden Beispiele funktioniert mit HM-Wandthermostaten. Sie können ebenso für andere Thermostate oder Module wie THRESHOLD entsprechend angepasst werden.&lt;br /&gt;
=== Steuerung von Raumthermostaten für mehrere Räume ohne GUI ===&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition mit einem Template im DOIF-Perlmodus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zeiten, Raumthermostate und Temperaturen werden in der Definition selbst festgelegt und werden dort geändert. Im Status des Moduls werden zur Laufzeit die aktuell gesetzten Temperaturen festgehalten.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Thermostate DOIF DEF TPL_set_temp ( ## Template zum Setzen der Zimmertemperaturen\&lt;br /&gt;
{$1;;   ## Zeitangabe\&lt;br /&gt;
set_State(&amp;quot;KU $2, BA $3, DG $4, WZ $5, KO $6, KW $7,Ke $8&amp;quot;);;\&lt;br /&gt;
fhem_set&amp;quot;TH_Kueche_HM desired-temp $2&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_Bad_HM desired-temp $3&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_DG_HM desired-temp $4&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_WZ_HM desired-temp $5&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_Kz_o_HM desired-temp $6&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_Kz_w_HM desired-temp $7&amp;quot;;;\&lt;br /&gt;
fhem_set&amp;quot;TH_Keller_HM desired-temp $8&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
)\&lt;br /&gt;
##                         Zeit                  Ku,Ba,DG,Wz,Ko,Kw,Ke\&lt;br /&gt;
##                        $1                     $2 $3 $4 $5 $6 $7 $8&lt;br /&gt;
morgens_ein TPL_set_temp ([05:00|8] or [05:30|7],21,21,21,21,21,21,22)\&lt;br /&gt;
morgens_aus TPL_set_temp ([08:00|8] or [09:00|7],20,20,20,21,20,20,21)\&lt;br /&gt;
mittags_ein TPL_set_temp ([12:00],               21,20,21,22,19,21.5,21.5)\&lt;br /&gt;
abends_aus TPL_set_temp  ([20:00],               21,20,20,20,20,20,21)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Steuerung von Raumthermostaten für mehrere Räume mit GUI ===&lt;br /&gt;
&lt;br /&gt;
Anforderung: &lt;br /&gt;
* Es soll nur eine zentrale Steuerungslogik für das Setzen der Temperaturen für alle Räume mit einer Fußbodenheizung erstellt werden.&lt;br /&gt;
* Anzahl der Zeitpunkte zum Setzen der Vorgabetemperaturen soll einfach veränderbar sein.&lt;br /&gt;
* Das Hinzufügen bzw. Löschen von Räumen soll durch Hinzufügen oder Löschen jeweils einer Zeile möglich sein.&lt;br /&gt;
* Das Ändern der Temperaturen sowie das Ändern der Schaltzeitpunkte soll über WEB-Oberfläche möglich sein.&lt;br /&gt;
* Das temporäre Ändern der aktuellen Vorgabetemperatur bis zum nächsten Schaltzeitpunkt soll über WEB-Oberfläche möglich sein.&lt;br /&gt;
* Die aktuelle Temperatur des Zimmers und der Zustand der Thermostats (on/off) soll visualisiert werden.&lt;br /&gt;
* Schaltzeiten sollen für Wochentage und Wochenende (Ferien) separat einstellbar sein.&lt;br /&gt;
* Das Setzen der Wunschtemperatur soll pro Raum abschaltbar sein.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel wurde für eine Fußbodenheizung mit Stellantrieben programmiert. Die Thermostate sind jeweils direkt mit einem Schalter gepeert. Die Schalter schalten ihrerseits per ON/OFF-Befehl die Stellantriebe des Raumes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition im DOIF-Perlmodus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Therm DOIF subs  {\&lt;br /&gt;
## Schaltzeitpunkte, Liste kann angepasst werden  \&lt;br /&gt;
@{$_Timer}= qw(morgens vormittags nachmittags abends);;\&lt;br /&gt;
@{$_Timer_default_at} = qw(04:30 08:00 13:00 22:00);;\&lt;br /&gt;
@{$_Timer_default_we} = qw(05:30 09:00 13:00 22:00);;\&lt;br /&gt;
$_temp_default_at=20;; ## Wunschtemperaturvorgabe für Arbeitstage\&lt;br /&gt;
$_temp_default_we=20;; ## Wunschtemperaturvorgabe fürs Wochenende\&lt;br /&gt;
$_temp_default_diff=1;; ## Reduzierung der Wunschtemperatur außerhalb der Heizzeiten um X-Grad\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
## Angaben: Raumbezeichnung, Thermostat, Schalter;; Angaben können zweilenweise erweitert werden\&lt;br /&gt;
push (@{$_sc},[qw(Bad TH_Bad_HM H_Bad)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Dachgeschoss TH_DG_HM H_DG)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kueche TH_Kueche_HM H_Kueche)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinder_ost TH_Kz_o_HM H_Kz_o)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Kinder_west TH_Kz_w_HM H_Kz_w)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Wohnzimmer TH_WZ_HM H_WZ)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Schlafzimmer TH_Keller_HM H_Keller)]);;\&lt;br /&gt;
push (@{$_sc},[qw(Keller TH_AKeller_HM H_AKeller)]);;\&lt;br /&gt;
\&lt;br /&gt;
## Bei Initialisierung oder Änderung der Definition werden Timer-Readings und Temperatur-Readings erstellt und vorbelegt\&lt;br /&gt;
if ($::init_done) {\&lt;br /&gt;
    fhem(&amp;quot;deletereading $SELF .*&amp;quot;);;   ## Lösche alle Readings\&lt;br /&gt;
	for (my $j=0;;$j&amp;lt;@{$_Timer};;$j++)  { ## Für alle Timer\&lt;br /&gt;
	  set_Reading($_Timer[$j],$_Timer_default_at[$j]);; ## Vorbelegung der Zeit für Arbeitstage\&lt;br /&gt;
	  set_Reading(&amp;quot;$_Timer[$j]_WE&amp;quot;,$_Timer_default_we[$j]);; ## Vorbelegung der Zeit für Wochenende\&lt;br /&gt;
      for (my $i=0;;$i &amp;lt; @{$_sc};;$i++)  { ## Vorbelegung der Wunschtemperaturen für alle Räume\&lt;br /&gt;
	     set_Reading(&amp;quot;$_sc[$i][0]_mode&amp;quot;,&amp;quot;auto&amp;quot;);;\&lt;br /&gt;
	     set_Reading(&amp;quot;$_sc[$i][0]_temp_at_$_Timer[$j]&amp;quot;,$j % 2 ? $_temp_default_at-$_temp_default_diff: $_temp_default_at);;\&lt;br /&gt;
		 set_Reading(&amp;quot;$_sc[$i][0]_temp_we_$_Timer[$j]&amp;quot;,$j % 2 ? $_temp_default_we-$_temp_default_diff: $_temp_default_we);;\&lt;br /&gt;
	  }\&lt;br /&gt;
	}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub temp_at_set { ## Routine zum Setzen der Wunschtemperaturen aller Räume für einen Zeitpunkt an Arbeitstagen\&lt;br /&gt;
  my ($timer)=@_;;\&lt;br /&gt;
  for (my $i=0;;$i&amp;lt; @{$_sc};;$i++)  {\&lt;br /&gt;
     fhem_set(&amp;quot;$_sc[$i][1] desired-temp &amp;quot;.get_Reading (&amp;quot;$_sc[$i][0]_temp_at_$timer&amp;quot;)) if (get_Reading(&amp;quot;$_sc[$i][0]_mode&amp;quot;) eq &amp;quot;auto&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
sub temp_we_set { ## Routine zum Setzen der Wunschtemperaturen aller Räume für einen Zeitpunkt am Wochenende\&lt;br /&gt;
  my ($timer)=@_;;\&lt;br /&gt;
  for (my $i=0;;$i&amp;lt; @{$_sc};;$i++)  {\&lt;br /&gt;
	 fhem_set(&amp;quot;$_sc[$i][1] desired-temp &amp;quot;.get_Reading (&amp;quot;$_sc[$i][0]_temp_we_$timer&amp;quot;)) if (get_Reading(&amp;quot;$_sc[$i][0]_mode&amp;quot;) eq &amp;quot;auto&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
} ## subs\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_set_temp ( ## Definition des Templates namens TPL_set_temp zum Setzen der Thermostat-Vorgabetemperatur\&lt;br /&gt;
Timer_at_$1 {[$2|AT];;temp_at_set(&amp;quot;$1&amp;quot;)}  ## Block zum Setzen der Wunschtemperatur an Arbeitstagen, Parameter: $1:Timername, $2:Time_AT\&lt;br /&gt;
Timer_we_$1 {[$3|WE];;temp_we_set(&amp;quot;$1&amp;quot;)}  ## Block zum Setzen der Wunschtemperatur am Wochenende,   Parameter: $1:Timername, $3:Time_WE\&lt;br /&gt;
) ## TPL_set_temp\&lt;br /&gt;
\&lt;br /&gt;
## Generierung der Steuerung pro Raum mit Hilfe des obigen Templates\&lt;br /&gt;
FOR(@{$_Timer},TPL_set_temp($1,[$SELF:$_],[$SELF:$1_WE]))&lt;br /&gt;
attr di_Therm room Heizung&lt;br /&gt;
attr di_Therm uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:right;;&#039;;;\&lt;br /&gt;
  $TD{0}{2..6} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
  $TC{0}=&amp;quot;align=&#039;left&#039;&amp;quot;;;\&lt;br /&gt;
  \&lt;br /&gt;
  sub onoff_hue {\&lt;br /&gt;
    my($redblue)=@_;;\&lt;br /&gt;
    return ($redblue == 0 ? 240 : 0);;  \&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|FOR (@{$_Timer},&amp;quot;$1&amp;quot;|)&amp;quot;&amp;quot;\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;Arbeitstage&amp;quot;|FOR (@{$_Timer},WID([$SELF:$1],&amp;quot;time&amp;quot;)|)&amp;quot;&amp;quot;\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;Wochenende&amp;quot;|FOR (@{$_Timer},WID([$SELF:$1_WE],&amp;quot;time&amp;quot;)|)&amp;quot;&amp;quot;\&lt;br /&gt;
FOR (@{$_sc},\&lt;br /&gt;
  (&amp;quot;$1$1&amp;quot;|\&lt;br /&gt;
    card([$1$2:measured-temp:col1d],undef,\&lt;br /&gt;
         [$1$3:state] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_floor_heating_neutral\@silver&amp;quot; : &amp;quot;sani_floor_heating\@red&amp;quot; ,15,25,\&lt;br /&gt;
         undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,1,1,1,1,,200&amp;quot;,\&lt;br /&gt;
         undef,undef,[$1$3:state:col1d:$_ eq &amp;quot;on&amp;quot; ? 1:0],0,5,0,0,&amp;quot;I-O&amp;quot;,\&amp;amp;onoff_hue,&amp;quot;0,,fill:silver&amp;quot;)|\&lt;br /&gt;
    &amp;quot;Modus:&amp;quot;.widget([$SELF:$1$1_mode],&amp;quot;select,auto,off&amp;quot;),,&amp;quot;aktuell:&amp;quot;.widget([$1$2:desired-temp],&amp;quot;selectnumbers,18,0.5,22,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|\&lt;br /&gt;
    FOR(@{$_Timer},\&lt;br /&gt;
      (&amp;quot;AT: &amp;quot;.widget([$SELF:$1$1_temp_at_$2],&amp;quot;selectnumbers,18,0.5,22,1,lin&amp;quot;),,&amp;quot;WE: &amp;quot;.widget([$SELF:$1$1_temp_we_$2],&amp;quot;selectnumbers,18,0.5,22,1,lin&amp;quot;)|))\&lt;br /&gt;
    &amp;quot;&amp;quot;\&lt;br /&gt;
  )\&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Raumthermostate.png|800px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Tages-, Monats- und Jahresstatistik für Strom-, Gas-, Wasserzähler und andere Zähler==&lt;br /&gt;
&lt;br /&gt;
Anforderung: &lt;br /&gt;
* Zähler sollen durch Angabe des Devicenamens und Readings des Zählers hinzugefügt werden können&lt;br /&gt;
* Es soll der aktuelle Stunden-, Tages-, Monats- und Jahreswert berechnet werden&lt;br /&gt;
* Es soll der Wert der letzten Stunde, des letzten Tages, Monats und Jahres berechnet werden&lt;br /&gt;
* Die Werte sollen geloggt werden&lt;br /&gt;
* Die Werte sollen im DOIF visualisiert werden können&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispieldefinition im DOIF-Perlmodus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_counter_new DOIF subs {\&lt;br /&gt;
##                     Device        Reading          hier die push-Zeilen löschen bzw. durch eigene Readings ersetzen\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;MQTT2_DVES_C58DCB&amp;quot;,&amp;quot;total_w&amp;quot;]);; ## Wasserzähler\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;counter_rw&amp;quot;,&amp;quot;total_l&amp;quot;]);; ## Leitungswasser\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;counter_rw&amp;quot;,&amp;quot;total_z&amp;quot;]);; ## Regenwasser\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;MQTT2_DVES_C58DCB&amp;quot;,&amp;quot;total_pv&amp;quot;]);;         ## Solarenergie\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;MQTT2_DVES_C58DCB&amp;quot;,&amp;quot;total_c&amp;quot;]);; ## Bezugszähler\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;MQTT2_DVES_C58DCB&amp;quot;,&amp;quot;total_f&amp;quot;]);; ## Einspeisezähler \&lt;br /&gt;
  push (@{$_counter},[&amp;quot;MQTT2_DVES_C58DCB&amp;quot;,&amp;quot;total_gas&amp;quot;]);; ## Gaszähler  \&lt;br /&gt;
  push (@{$_counter},[&amp;quot;vaillant&amp;quot;,&amp;quot;total_h&amp;quot;]);;     ## Gasverbrauch Heizung + Warmwasser\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;vaillant&amp;quot;,&amp;quot;total_hc&amp;quot;]);;    ## Gasverbrauch Heizung\&lt;br /&gt;
  push (@{$_counter},[&amp;quot;vaillant&amp;quot;,&amp;quot;total_hwc&amp;quot;]);;   ## Gasverbrauch Warmwasser \&lt;br /&gt;
   push (@{$_counter},[&amp;quot;di_tibber&amp;quot;,&amp;quot;costsSum&amp;quot;]);; ## Stromkosten \&lt;br /&gt;
\&lt;br /&gt;
## Die restliche Code-Definition muss nicht angepasst werden\&lt;br /&gt;
## Anpassung der Visualisierung wird im uiTable-Attribut weiter unten vorgenommen\&lt;br /&gt;
\&lt;br /&gt;
sub hour { ## Diese Funktion wird zur vollen Stunde ausgeführt\&lt;br /&gt;
  my ($device,$reading,$mday,$yday)=@_;;\&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.hour_counter&amp;quot;,ReadingsVal($device, $reading,0));;   \&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.last_hour&amp;quot;,get_Reading(&amp;quot;$device.$reading.hour&amp;quot;,0),1);;\&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.hour&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.day&amp;quot;,int((ReadingsVal($device, $reading,0)-(get_Reading(&amp;quot;$device.$reading.day_counter&amp;quot;,0)))*1000)/1000,1);;\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt\&lt;br /&gt;
  my ($device,$reading,$mday,$yday)=@_;;\&lt;br /&gt;
  set_Reading(&amp;quot;$device.$reading.day_counter&amp;quot;,ReadingsVal($device, $reading,0));;   \&lt;br /&gt;
  set_Reading(&amp;quot;$device.$reading.last_day&amp;quot;,get_Reading(&amp;quot;$device.$reading.day&amp;quot;,0),1);;\&lt;br /&gt;
  set_Reading(&amp;quot;$device.$reading.day&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.month&amp;quot;,int((ReadingsVal($device, $reading,0)-(get_Reading(&amp;quot;$device.$reading.month_counter&amp;quot;,0)))*1000)/1000,1);;\&lt;br /&gt;
  set_Reading (&amp;quot;$device.$reading.year&amp;quot;,int((ReadingsVal($device, $reading,0)-(get_Reading(&amp;quot;$device.$reading.year_counter&amp;quot;,0)))*1000)/1000,1);;\&lt;br /&gt;
\&lt;br /&gt;
  if ($mday == 1) {\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.month_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.last_month&amp;quot;,get_Reading(&amp;quot;$device.$reading.month&amp;quot;,0),1);;\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.month&amp;quot;,0,1);;\&lt;br /&gt;
    if ($yday == 0) {\&lt;br /&gt;
      set_Reading(&amp;quot;$device.$reading.year_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
      set_Reading(&amp;quot;$device.$reading.last_year&amp;quot;,get_Reading(&amp;quot;$device.$reading.year&amp;quot;,0),1);;\&lt;br /&gt;
      set_Reading(&amp;quot;$device.$reading.year&amp;quot;,0,1);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub init_readings {\&lt;br /&gt;
  my ($device,$reading)=@_;;\&lt;br /&gt;
  if (get_Reading(&amp;quot;$device.$reading.day_counter&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;&amp;quot;) {   ## Initialisierung der Readings\&lt;br /&gt;
    ## aktuellen Zählerstand initialisieren\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.last_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.hour_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.day_counter&amp;quot;,ReadingsVal($device, $reading,0));;	\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.month_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
    set_Reading(&amp;quot;$device.$reading.year_counter&amp;quot;,ReadingsVal($device, $reading,0));;\&lt;br /&gt;
  \&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.hour&amp;quot;,0);;          ## aktueller Stundenverbrauch\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.day&amp;quot;,0);;           ## aktueller Tagesverbrauch\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.month&amp;quot;,0);;         ## aktueller Monatsverbrauch\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.year&amp;quot;,0);;          ## aktueller Jahresverbrauch\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.last_hour&amp;quot;,0);;      ## Verbrauch der letzten Stunde\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.last_day&amp;quot;,0);;      ## Verbrauch des letzten Tages\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.last_month&amp;quot;,0);;    ## Verbrauch des letzten Monats\&lt;br /&gt;
    set_Reading (&amp;quot;$device.$reading.last_year&amp;quot;,0);;     ## Verbrauch des letzten Jahres\&lt;br /&gt;
	## Log definieren\&lt;br /&gt;
    fhem (&amp;quot;defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.last_.*&amp;quot;);;\&lt;br /&gt;
    fhem (&amp;quot;attr log.counter.$device.$reading room Filelogs&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
} ## Ende subs-Block\&lt;br /&gt;
\&lt;br /&gt;
get_data {                             ## Optionale Übernahme bestehender Daten aus dem Log\&lt;br /&gt;
for (my $i=0;;$i&amp;lt;@{$_counter};;$i++) \&lt;br /&gt;
{ ## my $i=3;;\&lt;br /&gt;
      ::DOIF_set_card_data (&amp;quot;$SELF&amp;quot;,&amp;quot;$SELF&amp;quot;,&amp;quot;$_counter[$i][0].$_counter[$i][1].last_hour&amp;quot;,&amp;quot;bar2day&amp;quot;,-10,fhem(&amp;quot;get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_hour&amp;quot;));;\&lt;br /&gt;
    ::DOIF_set_card_data (&amp;quot;$SELF&amp;quot;,&amp;quot;$SELF&amp;quot;,&amp;quot;$_counter[$i][0].$_counter[$i][1].last_day&amp;quot;,&amp;quot;bar2month&amp;quot;,-300,fhem(&amp;quot;get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_day&amp;quot;));;\&lt;br /&gt;
    ::DOIF_set_card_data (&amp;quot;$SELF&amp;quot;,&amp;quot;$SELF&amp;quot;,&amp;quot;$_counter[$i][0].$_counter[$i][1].last_month&amp;quot;,&amp;quot;bar2year&amp;quot;,-300,fhem(&amp;quot;get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_month&amp;quot;));;\&lt;br /&gt;
	::DOIF_set_card_data (&amp;quot;$SELF&amp;quot;,&amp;quot;$SELF&amp;quot;,&amp;quot;$_counter[$i][0].$_counter[$i][1].last_year&amp;quot;,&amp;quot;bar2decade&amp;quot;,-300,fhem(&amp;quot;get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_year&amp;quot;));;\&lt;br /&gt;
	}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
hour {[:00];;                            ## Sicherung der Daten der letzten Stunde\&lt;br /&gt;
  for (my $i=0;;$i&amp;lt;@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion hour aufgerufen\&lt;br /&gt;
    hour($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
midnight {[00:01];;                          ## Sicherung der Daten um Mitternacht\&lt;br /&gt;
  for (my $i=0;;$i&amp;lt;@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\&lt;br /&gt;
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
init {                                ## initialisierung aller Readings\&lt;br /&gt;
  for (my $i=0;;$i&amp;lt;@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert\&lt;br /&gt;
    init_readings($_counter[$i][0],$_counter[$i][1]);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_stat (\&lt;br /&gt;
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten\&lt;br /&gt;
                    ##  $1 Zählerdevice, $2 Zählerreading\&lt;br /&gt;
\&lt;br /&gt;
  #  my $diff = int(([$1:$2,0]-(get_Reading(&amp;quot;$1.$2.last_counter&amp;quot;,0)))*1000)/1000;;\&lt;br /&gt;
      set_Reading (&amp;quot;$1.$2.last_counter&amp;quot;,[$1:$2,0]);;\&lt;br /&gt;
      set_Reading (&amp;quot;$1.$2.hour&amp;quot;,int(([$1:$2,0]-(get_Reading(&amp;quot;$1.$2.hour_counter&amp;quot;,0)))*1000)/1000,1);;\&lt;br /&gt;
 	}\&lt;br /&gt;
)\&lt;br /&gt;
\&lt;br /&gt;
## Pro Zähler wird über eine FOR-Schleife ein day_count_&amp;lt;Device&amp;gt;_&amp;lt;Reading&amp;gt;-Block generiert\&lt;br /&gt;
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading&lt;br /&gt;
attr di_counter_new room Verbrauch&lt;br /&gt;
attr di_counter_new uiTable {package ui_Table;;} ## Optionale Visualisierung der Energie-Verbräuche/-Produktion im DOIF-Device\&lt;br /&gt;
\&lt;br /&gt;
## Template für die Darstellung eines Wertes, einzelne card-Aufrufe können auskommentiert werden\&lt;br /&gt;
DEF TPL_single (\&lt;br /&gt;
##card([$SELF:$2.$3.day:col1w],&amp;quot;$1&amp;quot;,undef,$4,$5,$10,$11,&amp;quot;$12&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,halfring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)| Wochendarstellung\&lt;br /&gt;
card([[$SELF:$2.$3.last_hour:bar2day-10],[$SELF:$2.$3.hour]],&amp;quot;$1 in $12/h&amp;quot;,undef,$4/12,$5/12,$10,$11,[&amp;quot;letzte&amp;quot;,&amp;quot;aktuell&amp;quot;],undef,&amp;quot;2&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,halfring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$2.$3.last_day:bar2month-300],[$SELF:$2.$3.day]],&amp;quot;$12/Tag&amp;quot;,undef,$4,$5,$10,$11,[&amp;quot;letzter&amp;quot;,&amp;quot;aktuell&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,halfring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$2.$3.last_month:bar2year-300],[$SELF:$2.$3.month]],&amp;quot;$12/Monat&amp;quot;,undef,$6,$7,$10,$11,[&amp;quot;letzter&amp;quot;,&amp;quot;aktuell&amp;quot;],undef,&amp;quot;0&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,halfring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$2.$3.last_year:bar2decade-300],[$SELF:$2.$3.year]],&amp;quot;$12/Jahr&amp;quot;,undef,$8,$9,$10,$11,[&amp;quot;letzter&amp;quot;,&amp;quot;aktuell&amp;quot;],undef,&amp;quot;0&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,halfring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)\&lt;br /&gt;
)\&lt;br /&gt;
\&lt;br /&gt;
## Template für die Darstellung von zwei Werten, einzelne card-Aufrufe können auskommentiert werden\&lt;br /&gt;
DEF TPL_double (\&lt;br /&gt;
##card([[$SELF:$3.$4.day:col1w],[$SELF:$6.$7.day:col1w]],&amp;quot;$1&amp;quot;,undef,$8,$9,$14,$15,[&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,noring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)| Wochendarstellung\&lt;br /&gt;
card([[$SELF:$3.$4.last_hour:bar2day-10],[$SELF:$6.$7.last_hour:bar2day-10],[$SELF:$3.$4.hour],[$SELF:$6.$7.hour]],&amp;quot;$1/h&amp;quot;,undef,$8/12,$9/12,$14,$15,[&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;,&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;],undef,&amp;quot;2&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,noring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$3.$4.last_day:bar2month-300],[$SELF:$6.$7.last_day:bar2month-300],[$SELF:$3.$4.day],[$SELF:$6.$7.day]],&amp;quot;pro Tag&amp;quot;,undef,$8,$9,$14,$15,[&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;,&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,noring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$3.$4.last_month:bar2year-300],[$SELF:$6.$7.last_month:bar2year-300],[$SELF:$3.$4.month],[$SELF:$6.$7.month]],&amp;quot;pro Monat&amp;quot;,undef,$10,$11,$14,$15,[&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;,&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;],undef,&amp;quot;0&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,noring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[$SELF:$3.$4.last_year:bar2decade-300],[$SELF:$6.$7.last_year:bar2year-300],[$SELF:$3.$4.year],[$SELF:$6.$7.year]],&amp;quot;pro Jahr&amp;quot;,undef,$12,$13,$14,$15,[&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;,&amp;quot;$2&amp;quot;,&amp;quot;$5&amp;quot;],undef,&amp;quot;0&amp;quot;,&amp;quot;130,fixedscaling,,footer,noycolor,noring,220&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)\&lt;br /&gt;
)\&lt;br /&gt;
\&lt;br /&gt;
## Die Visualisierung einer Tabellenzeile wird über die obigen beiden Templates vorgenommen, hier zeilenweise anpassen/löschen:\&lt;br /&gt;
\&lt;br /&gt;
## Über das Template TPL_single wird jeweils pro card ein Wert visualisiert\&lt;br /&gt;
##          Überschrift,Device,Reading,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\&lt;br /&gt;
TPL_single (Frischwasser,MQTT2_DVES_C58DCB,total_w,0,500,0,10000,0,80000,90,0,Liter)\&lt;br /&gt;
TPL_single (Gas,MQTT2_DVES_C58DCB,total_gas,0,10,0,250,0,2000,90,0,m³)\&lt;br /&gt;
TPL_single (Einspeisung,MQTT2_DVES_C58DCB,total_f,0,30,0,600,0,5000,0,90,kWh)\&lt;br /&gt;
TPL_single (Bezug,MQTT2_DVES_C58DCB,total_c,-10,0,-300,0,-3000,0,0,90,kWh)\&lt;br /&gt;
TPL_single (Stromkosten,di_tibber,costsSum,0,4,0,90,0,1200,90,0,€)\&lt;br /&gt;
\&lt;br /&gt;
## Über das Template TPL_double werden jeweils pro card zwei Werte visualisiert\&lt;br /&gt;
##       Überschrift,Bezeichnung1,Device1,Reading1,Bezeichnung2,Device2,Reading2,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\&lt;br /&gt;
##TPL_double (Heizenergie,Gesamt,vaillant,total_h,Wasser,vaillant,total_hwc,0,100,0,2000,0,20000,90,0,kWh)\&lt;br /&gt;
\&lt;br /&gt;
##TPL_double (Stromeinspeisung/Strombezug,Bezug,MQTT2_DVES_C58DCB,total_c,Einsp.,MQTT2_DVES_C58DCB,total_f,-10,25,-300,600,-3000,5000,0,90,kWh)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bemerkungen:&lt;br /&gt;
* Die Visualisierung der Verläufe über das Attribut uiTable ist optional. &lt;br /&gt;
* Die Verlaufswerte der grafischen Darstellung mit Hilfe der card-Funktion werden im DOIF-Device gespeichert. Bereits geloggte Daten können mit &#039;&#039;&#039;set di_counter_new get_data&#039;&#039;&#039; importiert werden,  [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Import.2C_.C3.84nderung_und_L.C3.B6schung_von_Diagrammdaten siehe dazu auch Datenimport] &lt;br /&gt;
* Die obige Definition funktioniert nur mit Zählern, die mit aufsteigenden Werten (positiv/negativ) arbeiten, wie z. B. Stromverbrauch in kWh, Wasserverbrauch in Litern usw.. Es funktioniert nicht mit momentanen Werten, wie z. B. aktuelle Leistungsaufnahme eines Verbrauchers in Watt, diese müssten zunächst kumuliert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_counter.png|1000px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Dokumentation [[DOIF/Perl-Modus]]&lt;br /&gt;
* DOIF-WEB-Interface [[DOIF/uiTable Schnelleinstieg]]&lt;br /&gt;
* Weitere Anwendungsbeispiele mit uiTable [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41011</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41011"/>
		<updated>2026-04-23T07:04:20Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher %,\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41010</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41010"/>
		<updated>2026-04-23T06:51:06Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Einfache_uiTable-Funktionen]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41009</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41009"/>
		<updated>2026-04-23T06:50:51Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41008</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41008"/>
		<updated>2026-04-23T06:50:01Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41007</id>
		<title>DOIF/Einfache uiTable-Funktionen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41007"/>
		<updated>2026-04-23T06:46:53Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41006</id>
		<title>DOIF/Einfache uiTable-Funktionen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41006"/>
		<updated>2026-04-23T06:44:22Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Vorgabetemperatur eines Thermostats mit Hilfe der Funktion temp_knob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41005</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41005"/>
		<updated>2026-04-23T06:42:25Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Einfache_uiTable-Funktionen]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41004</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41004"/>
		<updated>2026-04-23T06:40:39Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Einfache uiTable-Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41003</id>
		<title>DOIF/Einfache uiTable-Funktionen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Einfache_uiTable-Funktionen&amp;diff=41003"/>
		<updated>2026-04-23T06:40:17Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: Die Seite wurde neu angelegt: „=== Einfache uiTable-Funktionen === ==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &amp;#039;&amp;#039;&amp;#039;temp&amp;#039;&amp;#039;&amp;#039; ==== Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert: ohne {{Randnotiz|RNText=uiTable-Funktion &amp;#039;&amp;#039;&amp;#039;temp&amp;#039;&amp;#039;&amp;#039; &amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt; temp ($temp,$size,$icon)  $temp # Temperatur $size # Schriftgröße in Pixel (pt), optional $icon # Icon, welches vorangestellt wird, optional &amp;lt;/syntaxh…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41002</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=41002"/>
		<updated>2026-04-23T06:34:13Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41001</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41001"/>
		<updated>2026-04-23T06:28:25Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Schnelleinstieg]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41000</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=41000"/>
		<updated>2026-04-23T06:25:42Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=40999</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=40999"/>
		<updated>2026-04-23T06:14:45Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow&#039;\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40998</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40998"/>
		<updated>2026-04-23T06:10:32Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Anwendungsbeispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40997</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40997"/>
		<updated>2026-04-23T06:09:55Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/uiTable_Anwendung]]&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40996</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40996"/>
		<updated>2026-04-23T06:06:58Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=40995</id>
		<title>DOIF/uiTable Anwendung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Anwendung&amp;diff=40995"/>
		<updated>2026-04-23T06:05:24Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: Die Seite wurde neu angelegt: „=== &amp;#039;&amp;#039; Visualisierung und Steuerung von &amp;#039;&amp;#039;&amp;#039;Rollläden&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; === {{Randnotiz|RNText=&amp;#039;&amp;#039;&amp;#039;nützliche Links&amp;#039;&amp;#039;&amp;#039; * {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}} * uiTable-Funktion shutter * uiTable-Funktion style * DOIF/uiTable Schnellei…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40994</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40994"/>
		<updated>2026-04-23T06:01:17Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $ oder neuer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40993</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40993"/>
		<updated>2026-04-22T21:07:08Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als zuvor definierte Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit &amp;quot;battery&amp;quot; gelöscht werden. Die programmierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40992</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40992"/>
		<updated>2026-04-22T21:04:30Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind alle erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40991</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40991"/>
		<updated>2026-04-22T20:53:20Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es wird vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40990</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40990"/>
		<updated>2026-04-22T20:52:53Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:Autarkie] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote] ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40989</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40989"/>
		<updated>2026-04-22T20:50:29Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktion des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40988</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40988"/>
		<updated>2026-04-22T20:44:38Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss als kompakte Energie-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF-Moduls benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40987</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40987"/>
		<updated>2026-04-22T20:30:07Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss als kompakte Energie-Karte&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Attribut zoom beliebig skalierbar (siehe im Device-Attribut uiTable Variable $TABLE). Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40986</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40986"/>
		<updated>2026-04-22T20:25:49Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Zoom-Attribut im Attribut uiTable in der Variablen $TABLE beliebig skalierbar. Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Batterie-Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40985</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40985"/>
		<updated>2026-04-22T20:23:48Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Zoom-Attribut im Attribut uiTable in der Variablen $TABLE beliebig skalierbar. Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder eine Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40984</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40984"/>
		<updated>2026-04-22T20:23:00Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Zoom-Attribut im Attribut uiTable in der Variablen $TABLE beliebig skalierbar. Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40983</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40983"/>
		<updated>2026-04-22T20:22:45Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Die Größe der Grafik ist über das CSS-Zoom-Attribut im Attribut uiTable in der Variablen $TABLE beliebig skalierbar. Im Definitionsbereich des DOIF-Devices sind aller erforderlichen Perlfunktionen definiert. Es werden vornehmlich die ring2-SVG-Funktionen des DOIF benutzt. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierten Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt. Vorausgesetzt wird mindestens die DOIF-Version: # $Id: 98_DOIF.pm 31131 2026-04-17 18:27:58Z Damian $&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40982</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40982"/>
		<updated>2026-04-22T20:08:26Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnten z. B. ein E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.0;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40981</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40981"/>
		<updated>2026-04-22T20:06:20Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40980</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40980"/>
		<updated>2026-04-22T20:05:03Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40979</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40979"/>
		<updated>2026-04-22T20:04:13Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40978</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40978"/>
		<updated>2026-04-22T20:03:10Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40977</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40977"/>
		<updated>2026-04-22T20:00:15Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring2-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:UiTable_energy_card_compact.gif&amp;diff=40976</id>
		<title>Datei:UiTable energy card compact.gif</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:UiTable_energy_card_compact.gif&amp;diff=40976"/>
		<updated>2026-04-22T19:56:15Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40975</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40975"/>
		<updated>2026-04-22T19:55:36Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Visualisierung: Energiefluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_energy_card_compact.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40974</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40974"/>
		<updated>2026-04-22T19:53:02Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:energy_card.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40973</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40973"/>
		<updated>2026-04-22T19:52:48Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:energy_card.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40972</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40972"/>
		<updated>2026-04-22T19:52:18Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Package-Konzept, Auslagerung eigener Funktionen, der IMPORT-Befehl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:energy_card.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40971</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40971"/>
		<updated>2026-04-22T19:51:56Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Package-Konzept, Auslagerung eigener Funktionen, der IMPORT-Befehl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:energy_card.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40970</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=40970"/>
		<updated>2026-04-22T19:51:35Z</updated>

		<summary type="html">&lt;p&gt;Damian-s: /* Eigene uiTable-Funktionen programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state state.jpg|950x950px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der obigen Abbildung ist ein Statusbildschirm aus mehreren Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition [https://wiki.fhem.de/wiki/Import_von_Code_Snippets] ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt ebenfalls das Attribut &#039;&#039;&#039;uiState&#039;&#039;&#039;, welches die gleiche Syntax wie uiTable nutzt. Die definierte Tabelle erscheint im Gegensatz zu uiTable jedoch im Status des DOIF-Devices. uiState und uiTable können gleichzeitig in einem DOIF-Device definiert werden.  &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &#039;.*&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &#039;^info$&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Text kann mit Befehlen etc. durch einen Punkt verknüpft werden&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Diese Funktionen befinden sich im Namensraum &#039;&#039;&#039;ui_Table&#039;&#039;&#039;, daher muss vor deren Nutzung der Namensraum im Perlblock mit &#039;&#039;&#039;package ui_Table&#039;&#039;&#039; festgelegt werden (siehe Beispiele unten). Funktionen aus dem Namensraum &#039;&#039;&#039;main&#039;&#039;&#039; - das ist der Standard-Namensraum in FHEM - müssen in diesem Fall mit vorangestelltem Namensraum angegeben werden: &#039;&#039;&#039;main::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039; oder kürzer &#039;&#039;&#039;::&amp;lt;perlfunction&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$sizeHalf, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$sizeHalf    # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$sizeHalf,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 80, half ring: 1 für Halbring&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden. Dabei wird die Farbe mit Anleihen aus dem [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum] bestimmt. Dieser Farbraum benötigt eigentlich drei Werte, wobei die erste den Farbton (hue) bestimmt; hier wird nur dieser Wert verwendet (Sättigung und Hellwert sind nicht einstellbar). Der Farbton geht von rot (hue-Wert = 0) über gelb (hue-Wert = 60), dann grün (hue-Wert = 120) und blau (hue-Wert = 240) zurück zu rot (hue-Wert = 360), siehe dazu auch die [https://de.wikipedia.org/wiki/HSV-Farbraum#/media/Datei:HueScale.svg Farbtontafel] auf der Wikipedia-Seite.&lt;br /&gt;
Die unten $colorRef genannte Funktion kann zum Beispiel in der Tabelle selbst definiert werden, beispielsweise kann man in dem device &amp;amp;onoff_hue verwenden, wenn man es vorab definiert (siehe [https://forum.fhem.de/index.php/topic,120088.msg1204341.html#msg1204341 Link zum Forum]):&amp;lt;blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;ui device Name&amp;gt; {&lt;br /&gt;
  package ui_Table;&lt;br /&gt;
    sub onoff_hue {&lt;br /&gt;
    my($irgendeinVariablenname)=@_;&lt;br /&gt;
    return ($irgendeinVariablenname == 0 ? 240 : 0); &lt;br /&gt;
  }&lt;br /&gt;
## Tabellendefinition&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/blockquote&amp;gt;{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$desc, $sizeHalf,$colorRef,$decFontUnit,$model,$lightness)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$sizeHalf  # &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;half ring&amp;gt;&amp;quot; size: Größe der Grafik, optional, default = 100, half ring: 1 für Halbring&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFontUnit # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test20,test5&lt;br /&gt;
attr di_ring uiTable {package ui_Table;; \&lt;br /&gt;
 $SHOWNOSTATE=1}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heating:pump],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
## Innenring mit Min-, Max-Beschriftung\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heating:pressure],0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%,fill:silver;;font-size:50%&amp;quot;,&amp;quot;0,1,1&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([outdoor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([outdoor:temperature,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Lufdruck als Halbring\&lt;br /&gt;
&amp;quot;Luftdruck&amp;quot;|ring([weather:barometer],970,1045,30,90,&amp;quot;hPa&amp;quot;,&amp;quot;100,1&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Co2 als Halbring, Farbgebung als Array mit drei Bereichen, Innenring mit Zeiger\&lt;br /&gt;
&amp;quot;Co2&amp;quot;|ring([livingroom:co2],400,1200,undef,undef,&#039;ppm&#039;,&amp;quot;100,1&amp;quot;,[(600,120,1000,60,1200,0)],0,&#039;0,0,1,5&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2, $lightness,$icon,$model)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFontUnit1 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFontUnit2 # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition Innenring, Farb-Array, Ringmodi&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_solar DOIF {}&lt;br /&gt;
attr di_solar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Farb-Array, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],-20,30,undef,undef,&amp;quot;PV kWh&amp;quot;,130,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,[test:Bezug],-20,30,undef,undef,&amp;quot;Bezug&amp;quot;,[(-10,0,-0.001,30,10,60,30,90)],&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 1&amp;quot;|\&lt;br /&gt;
ring2([zeahler:Produktion],-20,30,0,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,30,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,1,1,0,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Farbe linear, ringMode 2&amp;quot;|\&lt;br /&gt;
ring2([zaehler:Produktion],0,30,60,120,&amp;quot;PV kWh&amp;quot;,130,undef,&amp;quot;2&amp;quot;,[test:Bezug],-20,0,0,120,&amp;quot;Bezug&amp;quot;,undef,&amp;quot;2&amp;quot;,undef,undef,&amp;quot;0,,,0,2&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_ringMode.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness,$model)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$desc1,$size,$colorFunc1,$decFont1, $value2,$min2,$max2,$minColor2,$maxColor2,$desc2,$colorFunc2,$decFont2,$lightnesss,$model)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$desc1      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$desc2      # Beschreibung des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot; optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
$model     # &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;&amp;lt;collect type&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type]&#039;&#039;&#039;. Dadurch werden Daten des Readings im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $desc,$colorRef,$decFontUnit,$prop,$ringModel,$lightness, $collect2,$min2,$max2,$minColor2,$maxColor2,$desc2,$func2,$decFontUnit2)&lt;br /&gt;
&lt;br /&gt;
$collect/$collect2  &lt;br /&gt;
# Angabe eines Readings oder eines Arrays mit mehreren Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:&amp;lt;collect type&amp;gt;:&amp;lt;output&amp;gt;], mit Hilfe des Argumentes &amp;lt;collect type&amp;gt; wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln. Sollen Werte aus einem Array nur im Ring angezeigt werden und nicht Diagramm visualisiert werden, so wird das &amp;lt;collect type&amp;gt; nicht angegeben. Dabei können pro Wert eigene ring-Formatierungen vorgenommen werden. Mindestens ein Reading muss mit &amp;lt;collect type&amp;gt; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;collect type&amp;gt;&lt;br /&gt;
# Darstellung kontinuierlicher Daten als Linie&lt;br /&gt;
col&amp;lt;number&amp;gt;&amp;lt;timeFormat&amp;gt; &lt;br /&gt;
# &amp;lt;timeFormat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. &lt;br /&gt;
# Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
# Darstellung eines Wertes als Säule eines bestimmten Zeitraum (Stunde, Tag, Monat, Jahr)&lt;br /&gt;
bar/barAvg&amp;lt;number&amp;gt;&amp;lt;period&amp;gt;&amp;lt;timeOffset&amp;gt;&lt;br /&gt;
# &amp;lt;number&amp;gt;: Anzahl der Perioden&lt;br /&gt;
# &amp;lt;period&amp;gt;: Art der Periode: day, week, month, year, decade&lt;br /&gt;
# bei day werden 24 Stunden als Balken dargestellt,&lt;br /&gt;
# bei week werden 7 Tage (Mo bis So) der Woche dargestellt,&lt;br /&gt;
# bei month werden bis 31 Tage des Monats dargestellt,&lt;br /&gt;
# bei year werden 12 Monate des Jahres dargestellt,&lt;br /&gt;
# bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.&lt;br /&gt;
# &amp;lt;timeOffset&amp;gt;: Zeitverschiebung in Sekunden (positive Zahlen in die Zukunft, neg. Zahlen in die Vergangenheit)&lt;br /&gt;
# Anmerkung: Im optimalen Fall wird im angegebenen Zeitraum (Stunde (Periode day), Tag (Periode week oder month), Monat (Periode year), Jahr (Periode decade)) nur ein Wert per Event geliefert, werden mehrere Events geliefert, so wird der letzte Wert des Zeitraum übernommen. Bei barAvg werden wird dagegen der Mittelwert der gelieferten Daten einer Periode gebildet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;output&amp;gt; &lt;br /&gt;
# Der Wert des Readings kann über den optionalen output-Parameter mit Hilfe von Perl verändert werden&lt;br /&gt;
# Beispiel, der Wert on des Readings soll auf 1 abgebildet werden, sonst auf 0: $_ eq &amp;quot;on&amp;quot; ? 1 : 0&lt;br /&gt;
 &lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$desc      &lt;br /&gt;
# Beschreibung des Wertes, optional, default = undef, falls unter $collect ein Array für mehrere Readings angegeben wurde, so werden hier als Array die entsprechenden Beschreibungen angegeben, zusätzlich kann kommagetrennt pro Einheit Farbe des Graphen angegeben werden&lt;br /&gt;
&lt;br /&gt;
$colorRef  &lt;br /&gt;
# Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
&lt;br /&gt;
$decFontUnit&lt;br /&gt;
# &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;,&amp;lt;Einheit hinter dem Zahlenwert&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
$prop      &lt;br /&gt;
# Eigenschaft von card: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;footer&amp;gt;,&amp;lt;color_y_scale&amp;gt;,&amp;lt;ring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;, optional&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;size&amp;gt;: Größe der der Karte, default = 130,&lt;br /&gt;
# &amp;lt;y-scaling&amp;gt;: &amp;quot;fixedscaling&amp;quot; (1), &amp;quot;autoscaling&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;steps&amp;gt;: &amp;quot;steps&amp;quot; (1),&amp;quot;nosteps&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;footer&amp;gt;: &amp;quot;footer&amp;quot; (undef),&amp;quot;nofooter&amp;quot; (1)&lt;br /&gt;
# &amp;lt;color_y_scale&amp;gt;: &amp;quot;ycolor&amp;quot; (undef), &amp;quot;noycolor&amp;quot; (1)&lt;br /&gt;
# &amp;lt;ring&amp;gt;: &amp;quot;ring&amp;quot; (undef), &amp;quot;noring&amp;quot; (0), &amp;quot;halfring&amp;quot; (1)&lt;br /&gt;
# &amp;lt;width&amp;gt;: Breite der Karte, default: 160&lt;br /&gt;
&lt;br /&gt;
$ringModel&lt;br /&gt;
# &#039;&amp;lt;color gradient&amp;gt;,&amp;lt;min/max&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;pointer&amp;gt;,&amp;lt;mode&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;color gradient&amp;gt;: &amp;quot;gradient&amp;quot; (undef),&amp;quot;nogradient&amp;quot; (1)&lt;br /&gt;
# &amp;lt;min/max&amp;gt;: Style-SVG-Attribute oder &amp;quot;nominmaxvalue&amp;quot; (undef), &amp;quot;minmaxvalue&amp;quot; (1)&lt;br /&gt;
# &amp;lt;inner ring&amp;gt;: Style-SVG-Attribute oder &amp;quot;innerring&amp;quot; (1), &amp;quot;noinnerring&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;pointer&amp;gt;: Breite des Zeigers in Pixel, &amp;quot;nopointer&amp;quot; (undef)&lt;br /&gt;
# &amp;lt;mode&amp;gt;: &amp;quot;minmax&amp;quot; (undef), &amp;quot;negzeropos&amp;quot; (1), &amp;quot;zeronegpos&amp;quot; (2)&lt;br /&gt;
# alle Parameter sind optional, default keine Angaben: &#039;,,,,,,&#039;&lt;br /&gt;
&lt;br /&gt;
$lightness &lt;br /&gt;
# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;inner ring&amp;gt;,&amp;lt;minMax&amp;gt;,&amp;lt;unit&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,50,50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$collect2  # optionale Angaben für ein zweites Reading&lt;br /&gt;
$min       # restliche Parameter&lt;br /&gt;
$max       # entsprechen der Syntax&lt;br /&gt;
...        # des ersten Sensors&lt;br /&gt;
$decFontUnit2 # &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
Werden mehrere Readings angegeben, so müssen sie alle die gleiche Zeitspanne besitzen (Zeitangabe bei col)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung kontinuierlicher Daten als Linie&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Es folgen einige Beispiele für die Darstellung von Readings mit Hilfe des Darstellungstyps &#039;&#039;&#039;col&#039;&#039;&#039;, deren Werte sich per Event kontinuierlich verändern.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung eines Readingwertes&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[600,120,1000,60,1200,0],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anpassung des Layouts&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;)\&lt;br /&gt;
&amp;quot;mit Halbring&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;,&amp;quot;Breite 110&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1,110&amp;quot;)\&lt;br /&gt;
&amp;quot;Standard&amp;quot;,&amp;quot;Breite 200&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_variations.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung zwei Readingwerte mit unterschiedlichen Einheiten&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cards DOIF {}&lt;br /&gt;
attr di_cards uiTable {package ui_Table;;}\&lt;br /&gt;
&amp;quot;Standard&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Header&amp;quot;,&amp;quot;ohne Fußzeile&amp;quot;|card([Aussensensor:temperature:col],undef,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;Als Halbring&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)\&lt;br /&gt;
&amp;quot;ohne Fußzeile&amp;quot;|\&lt;br /&gt;
card([Aussensensor:temperature:col],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1&amp;quot;,&amp;quot;130,,,1,,1&amp;quot;,undef,undef,[outsensor:humidity:col],0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_collect2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit gleicher Einheit&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Sprit DOIF ##&lt;br /&gt;
attr Sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_Sprit2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod PV DOIF {}&lt;br /&gt;
attr PV DOIF_Readings l_Eigenv: [zaehler:l-Produktion]-[zaehler:l-Lieferung],\&lt;br /&gt;
Eigenv:[zaehler:Produktion]-[zaehler:Lieferung],\&lt;br /&gt;
l_Verbrauch: [zaehler:l-Bezug,0]+[$SELF:l_Eigenv,0],\&lt;br /&gt;
Verbrauch:[zaehler:Bezug]+[$SELF:Eigenv],\&lt;br /&gt;
l_Bezug:-[zaehler:l-Bezug]&lt;br /&gt;
attr PV uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $SHOWNOSTATE=1;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[zaehler:l-Produktion:col],[$SELF:l_Eigenv:col],[$SELF:l_Bezug:col]],&amp;quot;kW&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;Solar&amp;quot;,&amp;quot;Eigen.&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-1,0,0,30,1,60,3.6,90)],&amp;quot;2&amp;quot;,&amp;quot;167,,1,,,1&amp;quot;,&amp;quot;,,1,6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrerer Readingwerte mit einfarbigen Graphen&amp;lt;/big&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_heating DOIF {}&lt;br /&gt;
attr di_heating uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],&amp;quot;Umwälzpumpe&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,[&amp;quot;Vor. °C,red&amp;quot;,&amp;quot;Rück. °C,#287afc&amp;quot;],\&amp;amp;temp_hue,undef,&amp;quot;,,1,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_pump.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Darstellung mehrere Readingwerte mit und ohne Verlaufvisualisierung&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen&#039;&#039;&#039;&lt;br /&gt;
*Die col-Angabe kann bei Readingsangaben ausgelassen werden, dann werden die Daten dieses Readings nicht gesammelt und erscheinen nur in den Ringen in der Kopfzeile, nicht aber im Hauptring, nicht im Plot und nicht in der Fußzeile. Mindestens ein Reading einer card muss col-Angaben beinhalten.&lt;br /&gt;
*Für collect bzw. collect2 können beliebig viele Werte angegeben werden.&lt;br /&gt;
*In card gibt es nur einen Hauptring mit einem Wert oder als Doppelring mit zwei Werten, alle weiteren Werte landen als Halbringe in der Kopfzeile. Wenn eine 1 beim Parameter hring angegeben wird, so werden alle Werte als Halbring in der Kopfzeile dargestellt, es gibt dann keinen Hauptring.&lt;br /&gt;
*Die ersten beiden Werte mit col-Angaben aus collect werden im Doppelring angezeigt, alle weiteren landen in Halbringen in der Kopfzeile; wenn collect nur einen Wert hat und collect2 mehrere, dann wird der erste Wert von collect und der erste Wert von collect2 im Doppelring angezeigt, die restlichen von collect2 landen in Halbringen der Kopfzeile.&lt;br /&gt;
*Bei einer Card mit Standardbreite können maximal 6 Werte angezeigt werden. Zwei im Doppelring und vier in Halbringen in der Kopfzeile. Möchte man mehr als 6 Werte anzeigen, dann muss man die Breite von card vergrößern, damit mehr als vier Halbringe in der Kopfzeile Platz finden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[$SELF:power_pv:144col1d],[$SELF:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c.day],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day]],-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;,&amp;quot;Einsp.&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_energie2.png|ohne|mini]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card mit Zusatzinformationen, die nicht im Plot erscheinen mit eigenen Formatierungsangaben zum Ring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sollen Zusatzinformationen, die nicht im Plot erscheinen, in der Kopfzeile mit eigenen Formatierungsangaben im Ring dargestellt werden, dann können sie beim $collect/$collec2-Parameter als Array mit zusätzlichen Parametern angegeben werden. Diese Angaben übersteuern die Formatierungsangaben, die für den Hauptring gelten. Die Bedeutung der Parameter entspricht der der card-Parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
Syntax für $collect/$collect2&lt;br /&gt;
[...,[[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;],$min,$max,$minColor,$maxColor,$desc, $colorRef,$decFontUnit,$ringModel],...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Beschreibung der Parameter siehe card-Funktion &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_gas DOIF {}&lt;br /&gt;
attr di_gas uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([[di_counter:gas.day:col1w],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.year],0,1500,90,0,&amp;quot;Jahr&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;1,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,halfring,180&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter:gas.last_day:bar2month-300],[[di_counter:gas.last_month],0,250,90,0,&amp;quot;letzter&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;],[[di_counter:gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, m³&amp;quot;]],&amp;quot;Gasverbrauch&amp;quot;, undef,0,10,90,0,&amp;quot;Tag&amp;quot;, undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,1,1,0,1,noring,180&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_gas.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wetter DOIF {}&lt;br /&gt;
attr di_wetter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
card([Aussen:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,ycolor,ring,200&amp;quot;,undef,undef,[[Aussen:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_wetter.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;big&amp;gt;Anwendungsbeispiele mit card&amp;lt;/big&amp;gt;======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aktuell DOIF {}&lt;br /&gt;
attr Aktuell alias Übersicht&lt;br /&gt;
attr Aktuell uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
 ## $TABLE=&#039;vertical-align:top&#039;;;\&lt;br /&gt;
  $TC{0..1} = &amp;quot;style=&#039;vertical-align:top&#039;&amp;quot;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  ## $SHOWNOSTATE=1;;\&lt;br /&gt;
 }\&lt;br /&gt;
## $prop: &amp;quot;&amp;lt;size&amp;gt;,&amp;lt;y-scaling&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;,&amp;lt;noColor&amp;gt;,&amp;lt;hring&amp;gt;,&amp;lt;width&amp;gt;&amp;quot;\&lt;br /&gt;
::sunrise_abs(),::sunset_abs()|&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-size:25pt;;color:silver&#039;&amp;gt;wait&amp;lt;/div&amp;gt;&amp;quot;&amp;lt;\&lt;br /&gt;
style([wetter_com_broich:Ansage],[wetter_com_broich:Ansage] eq &amp;quot;Kein Niederschlag in Sicht&amp;quot; ? &amp;quot;silver&amp;quot;:&amp;quot;red&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([MQTT2_zigbee_0x048727fffee80c78:temperature:col1d],&amp;quot;&amp;quot;,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;Temp.&amp;quot;,\&amp;amp;temp_hue,&amp;quot;1,,fill:silver,°C&amp;quot;,&amp;quot;130,,,0,1,,200&amp;quot;,undef,undef,[[MQTT2_zigbee_0x048727fffee80c78:humidity:col1d],[[Wetter:WindboeenKm],0,30,90,30,&amp;quot;Wind&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, km/h&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:LuftdruckHpa],980,1047,30,90,&amp;quot;Luftdr.&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;0,,fill:silver, hPa&amp;quot;,&amp;quot;,,,0&amp;quot;],[[Wetter:RegenGesamtMm],0,10,180,270,&amp;quot;Regen&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, mm&amp;quot;,&amp;quot;,,,0&amp;quot;]],0,100,undef,undef,&amp;quot;Feuchte&amp;quot;,\&amp;amp;hum_hue,&amp;quot;0,,fill:silver, %&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_DVES_C58DCB:power_pv:144col1d],[MQTT2_DVES_C58DCB:power_fc:144col1d]],&amp;quot;&amp;quot;,&amp;quot;fa_bolt\@silver&amp;quot;,-3.6,3.6,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Netz&amp;quot;],[(-1,0,-0.01,30,1,60,3.6,90)],&amp;quot;2,,fill:silver, kW&amp;quot;,&amp;quot;130,,1,0,1,,200&amp;quot;,&amp;quot;1,,1,0,negzeropos&amp;quot;,undef, [[[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day],0,30,60,90,&amp;quot;PV&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],0,30,60,90,&amp;quot;Einsp.&amp;quot;,[(10,60,30,90)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day],0,10,30,0,&amp;quot;Bezug&amp;quot;,[(3.3,30,10,0)]],[[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day],0,15,30,0,&amp;quot;Verbr.&amp;quot;,[(5,30,15,0)]]],0,10,30,0,[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;],[(3,30,10,0)],&amp;quot;1,,fill:silver, kWh&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_w.last_day:col4w],undef,&amp;quot;measure_water_meter\@silver&amp;quot;,0,600,120,0,&amp;quot;Verbr.&amp;quot;,undef,&amp;quot;0,,fill:silver, l&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef,[Wasserzisterne:Stand:col4w],0,100,240,180,&amp;quot;Zisterne&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;) |\&lt;br /&gt;
\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,1,0,1,,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month-300],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month-300]],&amp;quot;Strom&amp;quot;,undef,-25,25,0,90,[&amp;quot;PV&amp;quot;,&amp;quot;Bezug&amp;quot;],[(-10,0,-0.01,30,10,60,25,90)],&amp;quot;1,,fill:silver, kWh&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef) |\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2month-300],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day],0,10,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],\&lt;br /&gt;
[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.day],0,10,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,fill:silver, m³&amp;quot;],[[di_counter_new:MQTT2_DVES_C58DCB.total_gas.month],0,250,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1,,fill:silver, m³&amp;quot;]],&amp;quot;Gas&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;2,,fill:silver, m³&amp;quot;,&amp;quot;130,autoscaling,1,0,1,nohalfring,200&amp;quot;,undef,undef)\&lt;br /&gt;
\&lt;br /&gt;
card([di_tibber:tibber],&amp;quot;Tibber&amp;quot;,undef,0,40,90,0,&amp;quot;Cent&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,autoscaling,,,noycolor,halfring,200&amp;quot;)|\&lt;br /&gt;
\&lt;br /&gt;
card([[di_counter_new:di_tibber.costsSum.last_day:bar2month-300],[[di_counter_new:di_tibber.costsSum.last_day],0,3,90,0,&amp;quot;gestern&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.day],0,3,90,0,&amp;quot;heute&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;],[[di_counter_new:di_tibber.costsSum.month],0,80,90,0,&amp;quot;Monat&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;2,,, €&amp;quot;]],&amp;quot;Tibber&amp;quot;,undef,0,3,90,0,&amp;quot;Euro&amp;quot;,undef,&amp;quot;2,,, €&amp;quot;,&amp;quot;130,autoscaling,,footer,noycolor,nohalfring,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:PDC1:144col1d],[MQTT2_sbfspot:PDC2:144col1d]],&amp;quot;PV Leistung&amp;quot;,undef,0,3300,40,100,[&amp;quot;PDC1,yellow&amp;quot;,&amp;quot;PDC2,#FF5F1F&amp;quot;],undef,&amp;quot;0,,fill:silver, W&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)|\&lt;br /&gt;
\&lt;br /&gt;
card([[MQTT2_sbfspot:IDC1:144col1d],[MQTT2_sbfspot:IDC2:144col1d]],&amp;quot;PV Strom&amp;quot;,undef,0,8.5,40,100,[&amp;quot;IDC1,yellow&amp;quot;,&amp;quot;IDC2,#FF5F1F&amp;quot;],undef,&amp;quot;3,,, A&amp;quot;,&amp;quot;130,autoscaling,steps,footer,noycolor,halfring,200&amp;quot;,&amp;quot;1,,1,0,1&amp;quot;,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_card_uebersicht.png|ohne|500px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Darstellung fortlaufender Daten als Säulen&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Die Darstellung von fortlaufenden Daten kann mit Hilfe von Säulendiagrammen über den Darstellungstyp &#039;&#039;&#039;bar&#039;&#039;&#039; oder &#039;&#039;&#039;barAvg&#039;&#039;&#039; erfolgen. Werden die Reading-Werte innerhalb der definierten Periode öfters geschrieben, so wird bei der Angabe &#039;&#039;&#039;bar&#039;&#039;&#039; der letzte Wert des jeweiligen Zeitraums übernommen, bei der Angabe &#039;&#039;&#039;barAvg&#039;&#039;&#039; wird dagegen der Mittelwert der Werte gebildet und als Säule dargestellt. Die Werte der aktuellen Periode werden in hellen Farben dargestellt, die der vorherigen Perioden sind abgedunkelt. Der aktuelle Tag wird im Diagramm gekennzeichnet. Ebenso wird der minimale, maximale und der durchschnittlicher Wert errechnet und im Diagramm per Symbol bzw. Linie gekennzeichnet.&lt;br /&gt;
======&amp;lt;big&amp;gt;Energieverbrauch verschiedener Zeiträume&amp;lt;/big&amp;gt;======&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card siehe Syntax zu bar/barAvg beim card-Parameter &amp;lt;collect type&amp;gt;]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler siehe Statistik zu Zählerdaten mit Visualisierung]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energie DOIF {}&lt;br /&gt;
attr di_energie uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;Darstellung eines Monats&amp;quot;|&amp;quot;Darstellung eines Jahres&amp;quot;|&amp;quot;Darstellung einer Dekade&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1month],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_month:bar1year],&amp;quot;Gas in m³ pro Monat&amp;quot;,undef,0,100,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_year:bar1decade],&amp;quot;Gas in m³ pro Jahr&amp;quot;,undef,0,20000,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;0&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung einer Woche&amp;quot;|&amp;quot;Darstellung zwei Wochen&amp;quot;|&amp;quot;Darstellung vier Wochen&amp;quot;\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar1week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar2week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)|\&lt;br /&gt;
card([di_counter_new:MQTT2_DVES_C58DCB.total_gas.last_day:bar4week],&amp;quot;Gas in m³ pro Tag&amp;quot;,undef,0,10,90,0,&amp;quot;m³&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;)\&lt;br /&gt;
&amp;quot;Darstellung von zwei Werten&amp;quot;|&amp;quot;Darstellung mit Halbringen&amp;quot;|&amp;quot;Darstellung von zwei Monaten&amp;quot;\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;Elektrizität in kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,0,200&amp;quot;,&amp;quot;0,0,0,0,2&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar1month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar1month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)|\&lt;br /&gt;
card([[di_counter_new:MQTT2_DVES_C58DCB.total_pv.last_day:bar2month],[di_counter_new:MQTT2_DVES_C58DCB.total_c.last_day:bar2month]],&amp;quot;kWh pro Tag&amp;quot;,undef,-15,15,0,90,[&amp;quot;Ertrag&amp;quot;,&amp;quot;Bezug&amp;quot;],undef,&amp;quot;1&amp;quot;,&amp;quot;130,1,1,0,1,halfring,200&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:di_energie_bar.png|ohne|800px]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Import, Änderung und Löschung von Diagrammdaten&amp;lt;/big&amp;gt;=====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;card-data-Funktionen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gesammelte card-Daten löschen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daten aus einer Logdatei oder einer Liste übernehmen. Vorhandene card-Daten werden zuvor nicht gelöscht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;lt;card device&amp;gt;,&amp;lt;reading device&amp;gt;,&amp;lt;reading&amp;gt;,&amp;lt;col/bar specification&amp;gt;,&amp;lt;time offset&amp;gt;,&amp;lt;data list&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#&amp;lt;card device&amp;gt; DOIF-Device, wo die Definition der zu sammelnden Daten vorgenommen wurde&lt;br /&gt;
#&amp;lt;reading device&amp;gt; Device des Readings&lt;br /&gt;
#&amp;lt;reading&amp;gt; Readingname&lt;br /&gt;
#&amp;lt;col/bar specification&amp;gt; die dazugehörige Spezifikation des collect Typs, z. B. &amp;quot;col1w&amp;quot;, &amp;quot;bar1month&amp;quot; usw.&lt;br /&gt;
#&amp;lt;time offset&amp;gt; Angabe in Sekunden.&lt;br /&gt;
Der Zeitstempel der Daten wird zeitlich (positiv - in die Zukunft, negativ - in die Vergangenheit) verschoben. Damit kann man erreichen, dass Daten, die nach Mitternacht entstanden sind, dem Tag zuvor zugeordnet werden (negative Sekundenangabe).&lt;br /&gt;
#&amp;lt;data list&amp;gt; Liste von Datensätzen, die importiert werden sollen&lt;br /&gt;
das Format eines Datensatzes ist:&lt;br /&gt;
#YYYY.MM.DD_HH:MM:SS&amp;lt;separator&amp;gt;&amp;lt;value&amp;gt;, mit&lt;br /&gt;
#&amp;lt;separator&amp;gt; Leerzeichen oder Semikolon&lt;br /&gt;
#&amp;lt;value&amp;gt; Zahl&lt;br /&gt;
#ebenfalls ist das deutsche Zeitformat erlaubt&lt;br /&gt;
#DD.MM.YYYY HH:MM:SS&lt;br /&gt;
Die Datensätze können durch Komma oder Zeilenumbruch (newline) voneinander getrennt werden. Werden Zahlen mit Komma statt mit Punkt angegeben, so müssen die Datensätze durch Zeilenumbrüche getrennt werden.&lt;br /&gt;
Bei Datumsangaben kann der Tag und der Monat weggelassen werden, ebenfalls können Zeitangaben weggelassen werden.&lt;br /&gt;
Beispiel: &amp;quot;2023.02.21_15:01 10,2023.02.21 20,2023 15&amp;quot; oder &amp;quot;15.02.2023 15:01 10,21.02.2023 20,2023 15&amp;quot;&lt;br /&gt;
Die Liste kann ebenfalls von einer Funktion geliefert werden, wie z. B. Filelog oder DOIF_get_file_data.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Die Daten der zu visualisierenden Readings werden event-gesteuert im DOIF-Device gesammelt und in versteckten Readings gespeichert. Bei Neudefinition von card oder nach einem Systemcrash kann es sinnvoll sein, vorhandene Daten aus dem Log oder einer Liste für die Visualisierung zu übernehmen. Ebenfalls können gesammelte Daten gelöscht oder einzeln modifiziert werden. All das lässt sich mit den card-data-Funktionen umsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Im DOIF-Device &#039;&#039;&#039;di_pv&#039;&#039;&#039; werden Daten mit  Angabe &#039;&#039;&#039;[energie:pv:col4w]&#039;&#039;&#039; über card-Funktion visualisiert.&lt;br /&gt;
&lt;br /&gt;
Löschen der visualisierten Daten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_delete_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übernehmen von Daten eines bestimmten Zeitraums aus dem Log namens &#039;&#039;&#039;pv.energie.log&#039;&#039;&#039;, dort wurden die Daten des Readings &#039;&#039;&#039;pv&#039;&#039;&#039; geloggt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,fhem(&amp;quot;get pv.energie.log - - 2022-11-01 2023-02-03 4:pv&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get-Filelog-Syntax bitte in der Dokumentation zu Filelog entnehmen.&lt;br /&gt;
&lt;br /&gt;
Statt Log-Daten können ebenfalls Daten in einer kommagetrennten Liste angegeben übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Es sollen zwei Datensätze übernommen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_modify_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,&amp;quot;2023.02.04_11:00 10,2023.02.04_11:02 5.6&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Liste aus einer Datei, z. B. aus einer csv-Excel-Datei, kann mit der Funktion &#039;&#039;&#039;DOIF_get_file_data (&amp;lt;file&amp;gt;)&#039;&#039;&#039; übernommen werden. Dabei ist es unerheblich, ob die Daten im deutschen oder im internationalen Zeitformat vorliegen, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt.&lt;br /&gt;
&lt;br /&gt;
Ausgangssituation: Die Datei &#039;&#039;gas_jan.csv&#039;&#039; wurde in das log-Verzeichnis kopiert. Sie beinhaltet u.a. folgende Datensätze (Nachkommastellen wurden mit Komma getrennt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
2023;4,142&lt;br /&gt;
02.01.2023 00:01:00;5,159&lt;br /&gt;
03.01.2023 00:01;3,170&lt;br /&gt;
04.01.2023;5,420&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Import der Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DOIF_set_card_data (&amp;quot;di_pv&amp;quot;,&amp;quot;energie&amp;quot;,&amp;quot;pv&amp;quot;,&amp;quot;col4w&amp;quot;,0,DOIF_get_file_data(&amp;quot;./log/gas_jan.csv&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;card im Status des Originaldevices&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Soll im Status des Originaldevices eine Visualisierung mit Hilfe der card-Funktion vorgenommen werden, so kann wie folgt vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices mit dem Attribut DOIF_Readings zum Sammeln der zu visualisierenden Daten.&lt;br /&gt;
&lt;br /&gt;
Beispieldefintion für fünf Readings aus unterschiedlichen Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF {}&lt;br /&gt;
attr di_collect DOIF_Readings temperature:[Aussen:temperature:col2d],\&lt;br /&gt;
humidity:[Aussen:humidity:col2d],\&lt;br /&gt;
co2:[MQTT2_DVES_D90D08:MHZ19B_CarbonDioxide:col2d],\&lt;br /&gt;
SuperE5:[Tankstelle:SuperE5:col3d],\&lt;br /&gt;
Diesel:[Tankstelle:Diesel:col3d],\&lt;br /&gt;
full:[GasInStorageDE:full:bar1month]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ursprünglichen Device wird jeweils über das Attribut devStateIcon der Aufruf von card vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Aussen CUL_WS 5&lt;br /&gt;
attr Aussen alias Schuppen&lt;br /&gt;
attr Aussen devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;temp_outside\@silver&amp;quot;,-10,50,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;ui_Table::temp_hue,&amp;quot;1,,fill:silver&amp;quot;,&amp;quot;130,,,0,1,,&amp;quot;,undef,undef,ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;humidity&amp;quot;,&amp;quot;&amp;quot;),0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;ui_Table::hum_hue,&amp;quot;0,,fill:silver&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&amp;amp;date=now&lt;br /&gt;
attr GasInStorageDE comment Status: \&lt;br /&gt;
E - Estimated - Geschätzt\&lt;br /&gt;
C - Confirm - Bestätigt&lt;br /&gt;
attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;&amp;quot;,0,100,0,120,&amp;quot;full in %&amp;quot;,undef,&amp;quot;1&amp;quot;,&amp;quot;,fixedscaling,,,,halfring&amp;quot;)}&lt;br /&gt;
attr GasInStorageDE httpHeader x-key: 08154711&lt;br /&gt;
attr GasInStorageDE interval 0 6 * * *&lt;br /&gt;
attr GasInStorageDE readingList single(jsonPath(&#039;$.gas_day&#039;), &#039;gas_Day&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.gasInStorage&#039;), &#039;gasInStorage&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumption&#039;), &#039;consumption&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.consumptionFull&#039;), &#039;consumptionFull&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injection&#039;), &#039;injection&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawal&#039;), &#039;withdrawal&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.workingGasVolume&#039;), &#039;workingGasVolume&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.injectionCapacity&#039;), &#039;injectionCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.withdrawalCapacity&#039;), &#039;withdrawalCapacity&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.status&#039;), &#039;status&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.trend&#039;), &#039;trend&#039;, &#039;N/A&#039;);;\&lt;br /&gt;
single(jsonPath(&#039;$.data.0.full&#039;), &#039;full&#039;, &#039;N/A&#039;);;&lt;br /&gt;
&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::card([ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;SuperE5&amp;quot;,&amp;quot;&amp;quot;),ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;Diesel&amp;quot;,&amp;quot;&amp;quot;)],undef,&amp;quot;fuel\@silver&amp;quot;,&amp;quot;1.50&amp;quot;,&amp;quot;2.00&amp;quot;,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver&amp;quot;,&amp;quot;130,1,1,0,1&amp;quot;,undef,undef)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&lt;br /&gt;
defmod MQTT2_DVES_D90D08 MQTT2_DEVICE DVES_D90D08&lt;br /&gt;
attr MQTT2_DVES_D90D08 devStateIcon {ui_Table::card(ReadingsVal(&amp;quot;di_collect&amp;quot;,&amp;quot;co2&amp;quot;,&amp;quot;&amp;quot;),undef,&amp;quot;air\@silver&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],&amp;quot;0,,fill:silver&amp;quot;,&amp;quot;130,autoscaling,nosteps,footer,noycolor&amp;quot;,&#039;nogradient,nominmaxvalue,innerring,nopointer,minmax&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Visualisierung wird automatisch aktualisiert. Mit Hilfe dieser Vorgehensweise lassen sich cards über den Status des jeweiligen Devices oder den direkten Aufruf der card-Funktion auch in anderen Frontends wie z. B. Floorplan oder TabletUI darstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:card_im_Status.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039; &amp;lt;/big&amp;gt; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Bei cylinder_s werden die Balken aufeinander gestapelt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder/cylinder_s&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder/cylinder_s ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=====&amp;lt;big&amp;gt;cylinder mit verschiedenen Layouts&amp;lt;/big&amp;gt;=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;big&amp;gt;Gestapelte Werte mit cylinder_s&amp;lt;/big&amp;gt;=====&lt;br /&gt;
Gegenüberstellung cylinder und cylinder_s&lt;br /&gt;
[[Datei:cylinder_s.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; &amp;lt;/big&amp;gt;====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen siehe auch card bar]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;big&amp;gt;SVG-Grafiken beim Überstreichen mit dem Mauszeiger vergrößern&amp;lt;/big&amp;gt;====&lt;br /&gt;
Eine SVG-Grafik lässt sich beim Überstreichen mit dem Mauszeiger vergrößert darstellen. Dazu kann die hover-HTML-Eigenschaft genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Im Css-Attribut des FHEMWEB-Devices wird für diesen Zweck folgende Zeile eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
svg:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nur bestimmte SVG-Grafiken vergrößert werden, so muss deren Klasse angegeben werden. Mögliche Klassen sind: DOIF_card, DOIF_ring, DOIF_bar, DOIF_cylinder.&lt;br /&gt;
&lt;br /&gt;
Es sollen nur Cards vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es können ebenfalls mehrere Klassen mit Komma angegeben werden. Cards und Ringe sollen vergrößert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
.DOIF_card:hover,.DOIF_ring:hover {transition: transform 0.3s ease; transform: scale(2.0); transform-origin: 0 0;z-index: 9999; position:relative}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da es sich um eine allgemeingültige CSS-Definition handelt, können mit CSS-Kenntnissen durch Anpassung der Definition ebenfalls auch andere Transformationen der Grafiken vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Auf Tablets und Smartphones wird im Browser die hover-Eigenschaft oft durch Antippen der Grafik ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht eines PCs:&#039;&#039;&lt;br /&gt;
[[Datei:hover.gif|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache uiTable-Funktionen ===&lt;br /&gt;
==== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ====&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ====&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ====&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
====  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ====&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;HTML-code&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
  &#039;&#039;&#039;return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command&amp;gt;: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelbe&amp;quot; und &amp;quot;Grünabfuhr&amp;quot; im Kalender gesucht. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Hier reicht es den Kalender-Eintrag anzupassen\&lt;br /&gt;
  ##            Kalender-Eintrag, Reading, icon \&lt;br /&gt;
  push @{$_sc},[&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;,&amp;quot;Abfalltonne\@gray&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Gelbe&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;,&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;];;\&lt;br /&gt;
  push @{$_sc},[&amp;quot;Grünabfuhr&amp;quot;,&amp;quot;gruenschnitt&amp;quot;,&amp;quot;Gartenabfall\@green&amp;quot;];;\&lt;br /&gt;
  \&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
	my $days=fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $date=fhem(&#039;get cal events timeFormat:&amp;quot;%a. %d.%m.&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;,1);;\&lt;br /&gt;
	my $diff;;\&lt;br /&gt;
	if (defined($days) and $days ne &amp;quot;&amp;quot;) {\&lt;br /&gt;
	  my $now=::strftime (&#039;%j&#039;, localtime());;\&lt;br /&gt;
	  my $year=::strftime (&#039;%Y&#039;, localtime());;\&lt;br /&gt;
	  $diff=$days-$now;;\&lt;br /&gt;
	  if ($diff &amp;lt; 0) {\&lt;br /&gt;
	    $diff+=(365+($year % 4 eq 0 and $year % 100 ne 0 or $year % 400 eq 0 ? 1: 0));;\&lt;br /&gt;
	  }\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $date=&amp;quot;&amp;quot;;;\&lt;br /&gt;
	  $diff=&amp;quot;N/A&amp;quot;\&lt;br /&gt;
	}\&lt;br /&gt;
	set_Reading($reading.&amp;quot;_date&amp;quot;,$date);;\&lt;br /&gt;
    set_Reading($reading,$diff,1);;\&lt;br /&gt;
  }\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    for (my $i=0;;$i &amp;lt; @{$_sc};;$i++) {\&lt;br /&gt;
      days($_sc[$i][0],$_sc[$i][1]);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
init{[00:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;}\&lt;br /&gt;
update{update()}&lt;br /&gt;
attr Abfall room wiki-&amp;gt;abfall&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&amp;quot;text-align:center&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days eq &amp;quot;N/A&amp;quot; ? &amp;quot;blue&amp;quot; : $days &amp;gt; 1 ? &amp;quot;#606060&amp;quot; : &amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
DEF TPL_Tonne (style([$SELF:$1_date],&amp;quot;&amp;quot;,8),ic (&#039;$2&#039;,[$SELF:$1]))\&lt;br /&gt;
\&lt;br /&gt;
FOR (@{$_sc},TPL_Tonne($_$2,$_$3)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
}}&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex stationID(?!.*stationID).*windspeedAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex stationID(?!.*stationID).*windgustAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex stationID(?!.*stationID).*winddirAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex stationID(?!.*stationID).*precipRate&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex stationID(?!.*stationID).*precipTotal&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex stationID(?!.*stationID).*tempAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex stationID(?!.*stationID).*humidityAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex stationID(?!.*stationID).*uvHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex stationID(?!.*stationID).*pressureMin&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex stationID(?!.*stationID).*windchillAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex stationID(?!.*stationID).*dewptAvg&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex stationID(?!.*stationID).*solarRadiationHigh&amp;quot;:([\d+\.]+)&lt;br /&gt;
attr Wetter room Wetter&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal($name,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal($name,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal($name,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal($name,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal($name,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal($name,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Verlauf der letzten drei Tage mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter icon weather_wind&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col3d],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col3d],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col3d],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,60,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col3d],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,0,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col3d],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col3d],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,90,30,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col3d],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col3d],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col3d],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col3d],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,30,90,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col3d],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,30,90,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|800px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Tankstelle bestimmen [https://www.clever-tanken.de/ Clever tanken]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,&amp;quot;fuel\@silver&amp;quot;,1.40,1.9,120,0,[&amp;quot;E10&amp;quot;,&amp;quot;Diesel&amp;quot;],undef,&amp;quot;2,,fill:silver, €&amp;quot;,&amp;quot;130,autoscaling,steps,footer,ycolor,ring,200&amp;quot;,undef,undef)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Corona-7-Tage-Inzidenz&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Modul [[JsonMod]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuellen Inzidenzwerte werden vom RKI ausgelesen und deren Verlauf visualisiert.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein JsonMod Device für das Auslesen der Inzidenzzahlen definiert. Die gewünschten Regionen müssen für eigene Bedürfnisse angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&amp;amp;outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&amp;amp;returnGeometry=false&amp;amp;outSR=4326&amp;amp;f=json&lt;br /&gt;
attr RKI7 readingList multi(jsonPath(&amp;quot;\$.features[?(\@.attributes.GEN in [&#039;Städteregion Aachen&#039;, &#039;Düren&#039;, &#039;Heinsberg&#039;])]&amp;quot;), property(&#039;attributes.GEN&#039;), sprintf(&#039;%.1f&#039;, property(&#039;attributes.cases7_per_100k&#039;)));;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Inzidenzzahlen der letzten sieben Tage: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_corona DOIF ##&lt;br /&gt;
attr di_corona uiTable {package ui_Table}\&lt;br /&gt;
card([RKI7:Duren:col1w],&amp;quot;Düren&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Heinsberg:col1w],&amp;quot;Heinsberg&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)|\&lt;br /&gt;
card([RKI7:Stadteregion_Aachen:col1w],&amp;quot;Aachen&amp;quot;,&amp;quot;coronavirus&amp;quot;,0,200,120,0,&amp;quot;Fälle&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:uiTable_Inzidenz.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,1);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_h&amp;quot;,0,1)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_h&amp;quot;,get_Reading(&amp;quot;diff_hc&amp;quot;)+get_Reading(&amp;quot;diff_hwc&amp;quot;),1);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant room Ebus&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
  $SHOWNODEVICELINE = &amp;quot;test9|Damian&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70,130)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70,130)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,130,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],&amp;quot;50,35&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0,130)|\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,130)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,130)\&lt;br /&gt;
&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|&amp;quot;&amp;quot;|widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,100,120,0,&amp;quot;kWh&amp;quot;,undef,1)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@wite&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,15,120,0,&amp;quot;kWh&amp;quot;,undef,1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|800px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Energiefluss&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|ring2]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
}}&lt;br /&gt;
Die vorgestellte Lösung visualisiert in kompakter Form den aktuellen Stromfluss des Hauses. Der Energiefluss wird abhängig von der Leistung und der Flussrichtung animiert. Die Definition muss an eigene Bedürfnisse angepasst werden. Dazu müssen die Variablen für die maximale Leistung am Anfang der Definition angepasst sowie im Attribut DOIF_Readings die eigenen Readings angegeben werden. Im Attribut uiTable sind die einzelnen Visualisierungselemente als Perlfunktionen angegeben. Falls der Speicher nicht visualisiert werden soll, so können die beiden Zeilen beginnend mit battery gelöscht werden. Die zuvor definierte Perlfunktionen können an eigene Bedürfnisse angepasst werden. So könnte ein z. B. E-Auto oder Wärmepumpe dargestellt werden. Es werden keine weiteren Perlfunktionen oder Javascripte außerhalb des DOIF-Devices benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_energy_card_compact DOIF subs {\&lt;br /&gt;
## Hier die eigenen Maximalwerte anpassen\&lt;br /&gt;
\&lt;br /&gt;
## Leistungangaben in kW, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_power_max=3.6;; # maximale Bezug/Einspeise-Leistung\&lt;br /&gt;
$_solar_power_max=3.6;; # maximale PV Leistung\&lt;br /&gt;
$_home_power_max=3.6;;  # maximale Haus Leistung\&lt;br /&gt;
$_battery_power_max=1.050;; # maximale Lade/Entlade-Leistung\&lt;br /&gt;
\&lt;br /&gt;
## Tagesenergie in kWh, Werte können in der Realität überschritten werden \&lt;br /&gt;
$_grid_energy_feed_max=30;; # maximale Einspeiseenergie pro Tag\&lt;br /&gt;
$_grid_energy_consum_max=10;; # maximaler Bezugenergie pro Tag\&lt;br /&gt;
$_solar_energy_max=30;; # maximale PV Energie pro Tag\&lt;br /&gt;
$_home_energy_max=20;;  # maximale Verbrauch pro Tag\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub move {\&lt;br /&gt;
my ($left, $top, $content) = @_;;\&lt;br /&gt;
my $value;;\&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  $value = $content-&amp;gt;[0];;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $value =$content;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out = &#039;&amp;lt;div style=&amp;quot;position:absolute;; left:&#039;\&lt;br /&gt;
  . $left . &#039;px;; top:&#039;\&lt;br /&gt;
  . $top . &#039;px;;&amp;quot;&amp;gt;&#039;\&lt;br /&gt;
  . $value .\&lt;br /&gt;
  &#039;&amp;lt;/div&amp;gt;&#039;;;\&lt;br /&gt;
  \&lt;br /&gt;
if (ref($content) eq &amp;quot;ARRAY&amp;quot;) {\&lt;br /&gt;
  return ([$out,$content-&amp;gt;[1]]);;\&lt;br /&gt;
} else {\&lt;br /&gt;
  return ($out);;\&lt;br /&gt;
}\&lt;br /&gt;
}## end of move\&lt;br /&gt;
\&lt;br /&gt;
sub flow {\&lt;br /&gt;
\&lt;br /&gt;
my ($d,$item,$power,$max,$direction)=@_;;\&lt;br /&gt;
my $dur;;\&lt;br /&gt;
if ($power == 0) {\&lt;br /&gt;
  $dur=0;;\&lt;br /&gt;
} else {\&lt;br /&gt;
  $power=$max if ($power&amp;gt;$max);;\&lt;br /&gt;
  $dur=6-abs(int(5*$power/$max));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
\&lt;br /&gt;
my ($from, $to, $x1, $x2, $y1, $y2);;\&lt;br /&gt;
\&lt;br /&gt;
if ($direction==0) {        # ↖ unten rechts -&amp;gt; oben links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 1&amp;quot;,&amp;quot;-1 -1&amp;quot;,100,0,100,0);;\&lt;br /&gt;
} elsif ($direction==1) {   # ↘ oben links -&amp;gt; unten rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 -1&amp;quot;,&amp;quot;1 1&amp;quot;,0,100,0,100);;\&lt;br /&gt;
} elsif ($direction==2) {   # ↗ unten links -&amp;gt; oben rechts\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;-1 1&amp;quot;,&amp;quot;1 -1&amp;quot;,0,100,100,0);;\&lt;br /&gt;
} elsif ($direction==3) {   # ↙ oben rechts -&amp;gt; unten links\&lt;br /&gt;
  ($from, $to, $x1, $x2, $y1, $y2)=(&amp;quot;1 -1&amp;quot;,&amp;quot;-1 1&amp;quot;,100,0,0,100);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
my $out=&#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 40 35&amp;quot; width=&amp;quot;40&amp;quot; height=&amp;quot;35&amp;quot; style=&amp;quot;width:40px;; height:35px;;&amp;quot;&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
$out .= &#039;&amp;lt;defs&amp;gt;\&lt;br /&gt;
&amp;lt;linearGradient id=&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
    x1=&amp;quot;&#039;.$x1.&#039;%&amp;quot; y1=&amp;quot;&#039;.$y1.&#039;%&amp;quot; \&lt;br /&gt;
    x2=&amp;quot;&#039;.$x2.&#039;%&amp;quot; y2=&amp;quot;&#039;.$y2.&#039;%&amp;quot; \&lt;br /&gt;
    &amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;0%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;80%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;1&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;stop offset=&amp;quot;100%&amp;quot; stop-color=&amp;quot;white&amp;quot; stop-opacity=&amp;quot;0.2&amp;quot;/&amp;gt;\&lt;br /&gt;
    &amp;lt;animateTransform \&lt;br /&gt;
        id=&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot; \&lt;br /&gt;
        attributeName=&amp;quot;gradientTransform&amp;quot; \&lt;br /&gt;
        type=&amp;quot;translate&amp;quot; \&lt;br /&gt;
        from=&amp;quot;&#039;.$from.&#039;&amp;quot; \&lt;br /&gt;
        to=&amp;quot;&#039;.$to.&#039;&amp;quot; \&lt;br /&gt;
        dur=&amp;quot;&#039;.$dur.&#039;s&amp;quot; \&lt;br /&gt;
        repeatCount=&amp;quot;indefinite&amp;quot; \&lt;br /&gt;
        calcMode=&amp;quot;linear&amp;quot;/&amp;gt;\&lt;br /&gt;
&amp;lt;/linearGradient&amp;gt;\&lt;br /&gt;
&amp;lt;/defs&amp;gt;\&lt;br /&gt;
&amp;lt;path d=&amp;quot;&#039;.$d.&#039;&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;url(#flowGradient_&#039;.$item.&#039;)&amp;quot; stroke-width=&amp;quot;3&amp;quot; /&amp;gt;&#039;;;\&lt;br /&gt;
\&lt;br /&gt;
return ([$out,&#039;var e=document.getElementById(&amp;quot;flowAnim_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;dur&amp;quot;,&amp;quot;&#039;.$dur.&#039;s&amp;quot;);;e.setAttribute(&amp;quot;from&amp;quot;,&amp;quot;&#039;.$from.&#039;&amp;quot;);;e.setAttribute(&amp;quot;to&amp;quot;,&amp;quot;&#039;.$to.&#039;&amp;quot;);;};; var e=document.getElementById(&amp;quot;flowGradient_&#039;.$item.&#039;&amp;quot;);;if (e) {e.setAttribute(&amp;quot;x1&amp;quot;,&amp;quot;&#039;.$x1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;x2&amp;quot;,&amp;quot;&#039;.$x2.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y1&amp;quot;,&amp;quot;&#039;.$y1.&#039;%&amp;quot;);;e.setAttribute(&amp;quot;y2&amp;quot;,&amp;quot;&#039;.$y2.&#039;%&amp;quot;);;}&#039;])\&lt;br /&gt;
}  ## end of flow\&lt;br /&gt;
\&lt;br /&gt;
sub grid_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return (move(30,64,flow(&amp;quot;M 5 0 A 30 30 0 0 0 35 30&amp;quot;,&amp;quot;grid&amp;quot;,$power,$_grid_power_max,($power  &amp;gt; 0 ? 0 : 1))));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub solar_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
  return move(138,64,flow(&amp;quot;M 35 0 A 30 30 0 0 1 5 30 L 5 30&amp;quot;,&amp;quot;solar&amp;quot;,$power,$_solar_power_max,3));;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
sub home_power {\&lt;br /&gt;
my ($power)=@_;;  \&lt;br /&gt;
return move(30,94,flow(&amp;quot;M 5 35 A 30 30 0 0 1 35 5&amp;quot;,&amp;quot;home&amp;quot;,$power,$_home_power_max,3));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery_power {\&lt;br /&gt;
my ($power)=@_;;\&lt;br /&gt;
return move(138,94,flow(&amp;quot;M 35 35 A 30 30 0 0 0 5 5 &amp;quot;,&amp;quot;battery&amp;quot;,$power,$_battery_power_max,($power &amp;lt; 0 ? 0:1)));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub grid {\&lt;br /&gt;
my ($power,$feed,$consum)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
move(2,2,icon_ring2(&amp;quot;scene_power_grid\@silver&amp;quot;,$power,-$_grid_power_max,$_grid_power_max,undef,undef,&amp;quot;kW&amp;quot;,110,[(-0.33*$_grid_power_max,20,-0.01,40,0.33*$_grid_power_max,65,$_grid_power_max,85)],&amp;quot;2&amp;quot;,$feed-$consum,-$_grid_energy_feed_max,$_grid_energy_feed_max,0,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub self {\&lt;br /&gt;
my ($autark,$EVG)=@_;;\&lt;br /&gt;
move(64,60,ring2($autark,0,100,undef,undef,&amp;quot;Autarkie&amp;quot;,130,[(33.3,40,66.6,65,100,85)],&amp;quot;0,,fill:silver, %&amp;quot;,$EVG,0,100,190,170,&amp;quot;EVQ&amp;quot;,undef,&amp;quot;0,,fill:silver, %&amp;quot;,undef,undef,&amp;quot;nogradient,,innerring,nopointer&amp;quot;)) # [(33.3,40,66.6,65,100,85)]\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub solar {\&lt;br /&gt;
my ($power,$energy)=@_;;\&lt;br /&gt;
\&lt;br /&gt;
my ($power,$energy,$self_energy)=@_;; \&lt;br /&gt;
move(140,2,icon_ring2(&amp;quot;solar_icon\@silver&amp;quot;,$power,0,$_solar_power_max,60,90,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$energy,0,$_solar_energy_max,60,90,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub home {\&lt;br /&gt;
my ($power,$consum)=@_;;\&lt;br /&gt;
move(2,130,icon_ring2(&amp;quot;fa_home\@silver&amp;quot;,$power,0,$_home_power_max,40,10,&amp;quot;kW&amp;quot;,110,undef,&amp;quot;2&amp;quot;,$consum,0,$_home_energy_max,40,10,&amp;quot;kWh&amp;quot;,undef,&amp;quot;1&amp;quot;,undef,&amp;quot;nogradient,,noinnerring,nopointer&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
sub battery {\&lt;br /&gt;
my ($power,$cap)=@_;;\&lt;br /&gt;
move(140,130,icon_ring2(&amp;quot;battery_100\@silver&amp;quot;,$power,-$_battery_power_max,,$_battery_power_max,220,170,&amp;quot;kW&amp;quot;,110,[(-0.0001,200,$_battery_power_max,160)],&amp;quot;2&amp;quot;,$cap,0,100,0,90,&amp;quot;%&amp;quot;,undef,&amp;quot;0&amp;quot;,undef,&amp;quot;nogradient,,innerring,nopointer,negzeropos&amp;quot;));;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
attr di_energy_card_compact DOIF_Readings grid_power: [Netz:Leistung_Einspeisung_Bezug] ## Leistung Netz Einspeisung kW negativ Bezug kW,\&lt;br /&gt;
grid_energy_feed: [Netz:Energie_Einspeisung] ## Energie Einspeisung kWh,\&lt;br /&gt;
grid_energy_consum: [Netz:Energie_Bezug] Energie Bezug kWh,\&lt;br /&gt;
solar_power: [PV:Leistung_PV] ## Leistung PV kW,\&lt;br /&gt;
solar_energy: [PV:Energie_PV] ## Energie des Tages PV kWh,\&lt;br /&gt;
solar_self_energy: [PV:Energie_PV]-[Netz:Energie_Bezug] ## Eigenverbrauch PV kWh,\&lt;br /&gt;
home_power: ([Haus:Leistung_Verbrauch]) ## Leistung Haus kW,\&lt;br /&gt;
home_energy: [Haus:Energie_Verbrauch] ## Energie Haus kWh,\&lt;br /&gt;
battery_power: [Speicher:Leistung] ## Leistung Speicher kW laden positiv entladen negativ,\&lt;br /&gt;
battery_capa: [Speicher:Kapazität] ## Kapazität Speicher % (gesammelt für Card),\&lt;br /&gt;
autarchy:([Energie:autarki] ## Autarkie %,\&lt;br /&gt;
scr: [Energie:Eigenverbrauchquote ## Eigenverbrauchsquote %&lt;br /&gt;
attr di_energy_card_compact uiTable {\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
\&lt;br /&gt;
## Energy_card kann über das Attribut zoom skaliert werden\&lt;br /&gt;
\&lt;br /&gt;
$TABLE = &#039;zoom: 1;; width: 212px;; height: 195px;; text-align: left;; vertical-align: top;; border-radius:0%;;  position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; &#039;;;\&lt;br /&gt;
\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
} ## end of perl area\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
## nicht benötigte Darstellungselemente können Zeilenweise gelöscht werden\&lt;br /&gt;
\&lt;br /&gt;
grid([$SELF:grid_power],[$SELF:grid_energy_feed],[$SELF:grid_energy_consum]).\&lt;br /&gt;
grid_power([$SELF:grid_power]).\&lt;br /&gt;
solar([$SELF:solar_power],[$SELF:solar_energy]).\&lt;br /&gt;
solar_power([$SELF:solar_power]).\&lt;br /&gt;
battery([$SELF:battery_power],[$SELF:battery_capa]).\&lt;br /&gt;
battery_power([$SELF:battery_power]).\&lt;br /&gt;
home ([$SELF:home_power],[$SELF:home_energy]).\&lt;br /&gt;
home_power([$SELF:home_power]).\&lt;br /&gt;
self([$SELF:autarchy],[$SELF:scr])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:energy_card.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Links ===&lt;br /&gt;
* [[DOIF/Perl-Modus]]&lt;br /&gt;
* [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Damian-s</name></author>
	</entry>
</feed>